UNIX 系のシステムでは、ファイルについて「修正時間 mtime」「作成時間 ctime」「アクセス時間 atime」の情報があります。 この情報を表示するためのコマンドです。
引数としてファイルやディレクトリ名を指定すると、mtime/atime/ctime を表示します。 オプションは次のものがあります。
オプション 説明 -a atime でソート (アクセス時間) -c ctime でソート (作成時間) -m mtime でソート (修正時間)
私の ~/src/ruby/toolbox/*,v の結果です。
解説必要でしょうか?$ cd ~/src/ruby/toolbox $ ftime.rb *,v m(08/23/00 15:47:20) c(12/11/00 21:27:55) a(01/22/01 08:32:56) cat.rb,v m(09/03/00 02:44:36) c(12/11/00 21:27:56) a(01/22/01 08:32:56) du.rb,v m(09/15/00 14:23:45) c(12/11/00 21:27:56) a(01/22/01 08:32:56) find_nonuser.rb,v m(08/21/00 17:30:45) c(12/11/00 21:27:56) a(01/22/01 08:32:56) find_w.rb,v m(09/01/00 10:54:31) c(12/11/00 21:27:56) a(01/22/01 08:32:56) ftime.rb,v m(09/03/00 04:49:39) c(12/11/00 21:27:55) a(01/22/01 08:32:56) getconf.rb,v m(09/05/00 15:54:01) c(12/11/00 21:27:55) a(01/22/01 08:32:56) hd.rb,v m(08/17/00 20:20:07) c(12/11/00 21:27:55) a(01/22/01 08:32:56) head.rb,v m(06/09/99 05:51:06) c(12/11/00 21:27:55) a(01/22/01 08:32:56) ied.rb,v m(09/14/00 11:02:16) c(12/11/00 21:27:55) a(01/22/01 08:32:56) ll.rb,v m(09/03/00 01:22:08) c(12/11/00 21:27:55) a(01/22/01 08:32:56) mkdir.rb,v m(02/06/00 01:13:42) c(12/11/00 21:27:55) a(01/22/01 08:32:56) pathck.rb,v m(09/29/00 15:50:56) c(12/11/00 21:27:55) a(01/22/01 08:32:56) rg.rb,v m(01/27/01 03:25:05) c(01/27/01 03:25:05) a(01/27/01 03:25:05) sleep.rb,v m(08/08/99 00:47:50) c(12/11/00 21:27:55) a(01/22/01 08:32:56) stat.rb,v m(09/25/00 11:08:42) c(12/11/00 21:27:55) a(01/22/01 08:32:56) tail.rb,v m(03/01/99 14:27:30) c(12/11/00 21:27:55) a(01/22/01 08:32:56) tmpwatch.rb,v m(06/20/98 09:16:42) c(12/11/00 21:27:55) a(01/22/01 08:32:56) tree.rb,v m(09/07/00 21:12:27) c(12/11/00 21:27:56) a(01/22/01 08:32:56) version.rb,v m(08/17/00 21:07:23) c(12/11/00 21:27:55) a(01/22/01 08:32:56) wc.rb,v m(07/11/00 17:06:55) c(12/11/00 21:27:55) a(01/22/01 08:32:56) xargs.rb,v
Web ブラウザでの表示上は Ruby のスクリプトですが、HTML の特殊文字をエスケープしています。 テキストとしてセーブしてご利用ください。
#! /usr/local/bin/ruby
# /home/tetsu/src/ruby/toolbox/ftime.rb
# Created: September 01,2000 Friday 10:27:10
# Author: tetsu(WATANABE Tetsuya)
# $Id: ftime.rb,v 1.3 2001/08/14 18:20:50 tetsu Exp $
# usage:
T_fmt = '%x %X'
def pr(file, stat)
print '',
'm(', stat.mtime.strftime(T_fmt), ') ',
'c(', stat.ctime.strftime(T_fmt), ') ',
'a(', stat.atime.strftime(T_fmt), ') ',
file, "\n"
end
def usage
STDERR.print "usage: #{$0} [-(a|c|m)] file...\n"
exit 1
end
opt_sort_m = false
opt_sort_c = false
opt_sort_a = false
opt_sort = false
while /^-/ =~ ARGV[0]
$_ = ARGV.shift
opt_sort_m = true if ~/m/
opt_sort_c = true if ~/c/
opt_sort_a = true if ~/a/
usage if ~/[^-acm]/
end
if opt_sort_m || opt_sort_c || opt_sort_a
opt_sort = true
end
stat = {} if opt_sort
while file = ARGV.shift
if opt_sort
stat[file] = File.lstat(file)
else
pr(file, File.lstat(file))
end
end
exit unless opt_sort
stat.keys.sort {|a, b|
if opt_sort_m
[stat[b].mtime, a] <=> [stat[a].mtime, b]
elsif opt_sort_c
[stat[b].ctime, a] <=> [stat[a].ctime, b]
elsif opt_sort_a
[stat[b].atime, a] <=> [stat[a].atime, b]
end
}.each do |k|
pr(k, stat[k])
end
ctime って、おもしろいですよ。 え、想像した通りでした? ということは、UNIX 系のシステムをよくご存じですね。
表示形式は、必要にあわせて修正してください。 情報量を減らさないで、できるだけ多く表示したいと思い現在のようにしました。
最初オプションによるソートはなかったのですが、使っているうちにほしくなって機能追加してしまいました。 表示形式から sort コマンドでのソートは、ややこしいですから。 ソート部分については、もうすこしスマートに書けないかなと思ったりもしますが、とりあえず。
ソートをしない場合は、引数の順番に情報を出力します。 ソートのキーは、二つ利用していて第一キーがそれぞれの「時間」、第二キーが「ファイル名」です。
ファイルが持っている情報については、stat(2) のマニュアルを参照ください。 ヘッダファイルなどにも情報があります。
ls(1) コマンドでも、同様の情報を表示できることをご存じですか? 普段 ls コマンドではファイルの「修正時間」が表示されています。 ファイルが作成された時間やファイルが参照された時間も残っているので、うまく使ってください。
ruby 1.7.1 2001-08-06 対応です。