2009-02-05練習: Unix の 「ls -t」 コマンドのようなメソッド
『たのしいRuby』の第 17 章(Time クラス)の練習問題(2)
Unixの「ls -t」コマンドのように、ディレクトリを指定すると、そのディレクトリの下にある ファイルを時刻の順に並べるメソッド ls_t を定義しましょう。 このメソッドは引数を1つだけ取ります。 ls -t(調べるディレクトリ名) 指定されたディレクトリの下にあるファイルの名前を、その時刻の古い順に並べて表示します。
これだけだと、ファイルの名前だけ表示すればいいのか、それとも、時刻も表示するのかなど、仕様が決められないので、Unix の ls コマンドの t オプションについて調べた。
そしたら、UNIXコマンド [ls]では、t オプションをつけると、最新更新日時の最新のものから順に表示する、と説明されていた。
それで、Linux で実際に「ls -t」コマンドを使ってみたら、更新日時が新しいものが上にきていた。更新日時は表示されず、ファイル名だけが表示された。
実際に使ってみたときの結果から、以下のようなものをつくることにする。
- ディレクトリを指定すると、そのディレクトリの下にあるファイルの名前を、更新日時の新しいものから表示する
- 更新日時は表示しない
- 隠しファイル(ファイル名が . (ピリオド) で始まるもの)は表示しない
書いたもの
def ls_t(dir) entries = [] Dir.foreach(dir) {|path| next if /^\./ =~ path modified_time = File.mtime(File.join(dir, path)) entries << [path, modified_time] } entries.sort!{|a, b| b[1] <=> a[1] }.each{|entry| puts entry[0] } end ls_t(ARGV[0])
フォルダを「更新日時」で並べ替えたときと同じ並び順になったし、隠しファイルは表示されなかった。つくろうろしたものはできた、と思う。
コメントを書く