2012-01-20 15 views
0

ディレクトリではなく、作成された順にすべてのファイルをリストしたいと思います。私が試した:いくつかの迷惑なフォーマットで、すべてのファイルを取得しますディレクトリ内のファイルを作成順に再帰的にリストするにはどうすればよいですか?

ls -R 

を、私はラインでラインを好むだろうと。しかし、私の* nix-fooは非常に弱く、私は作成された日付で注文する方法がわかりません。

最終的にこれはRubyスクリプト内で行われるため、魔法のbashコマンドでは不可能な場合、Rubyコードは問題ありません。私はちょうど興味深いかもしれないと思って、おそらくより洗練されたbashを使用する。 GNUがあなたを助けることができる見つける

+0

LSは、[1] [bashのリスト・ファイル・バイ・ラスト・編集した日付] [1] を見ます/ 1404938/bash-list-files-by-last-edited-date – Chargaff

+0

ほとんど、しかし、私はそれらが作成された日付を編集したい、 – qui

答えて

1

残念ながら、Linuxは、作成日を格納しません。 Mac OSはそうですが、読みやすい形式ではありません。 Windowsはそれを格納する唯一のシステムですが、Rubyにはそれにアクセスするための固有のコマンドはありません。

Rubyのctimeを慎重に読んでみると、誤読されることが多く、「変更」時間のみをサポートしていることがわかります。ここでFileFile::Statからctimeのためのドキュメントは、次のとおりです。

は、ファイルの変更時刻を返します(つまり、ファイルそのもの、ファイルに関する 情報が変更された、タイム・ディレクトリではありません)。 http://stackoverflow.com/questions: -RT

+0

悲しい時、しかし感謝。 – qui

+0

@qui、Linuxの問題について議論しているStack Overflowの[検索](http://stackoverflow.com/search?q=%5Blinux%5Dctime&submit=search)です。結果のページの検索ボックスで選択したOSに置き換えてください。 –

1
Dir['**/*'].reject { |f| File.directory?(f) }.sort_by { |f| File.ctime(f) } 
0

は、この最初の

find . -type f -printf "%C+\t%M\t%p\n" | sed 's/+/ /' | sort -t" " +0 -1 

は、それが動作してみてください。

しかし、私は

find (GNU findutils) 4.4.2 

を使用していると私は%C+ブツを動作させることができませんでした。

私は長い手のprintf形式の文字列を思いつきました。これは、追加の利点として、sed後処理を必要としません。各タイムスタンプの

2011-03-30.141038.0000000000 -rw-r--r--  ./pkgs/libxml2/libxml2-22011-03-30.140959.0000000000 -rwxr-xr-x  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.libs/reader3.exe 
2011-03-30.141001.0000000000 -rwxr-xr-x  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.libs/reader3_ltshwrapper 
2011-03-30.141001.0000000000 -rwxr-xr-x  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/reader3.exe 
2011-03-30.141002.0000000000 -rw-r--r--  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/.deps/tree2.Po 
2011-03-30.141002.0000000000 -rw-r--r--  ./pkgs/libxml2/libxml2-2.7.7/doc/examples/tree2.o 

のような出力を提供します

find . -type f -printf '%CY-%Cm-%Cd.%CH%CM%CS\t%M\t%p\n' | sort +0 -1n 

末尾.0000000000は明らかに私のシステムが記録されない小数秒、です。 %TXを使用してHH:MM:SS形式を取得できます。

ファイルの一覧に追加のフィールドが必要な場合は、man findを入力して-printfを検索してください。あなたが必要とするところであれば、リストの書式を整えるための議論がたくさんあります。

「注文したかったら」と言います。 Unixのは、それが、

%A File's last access time 
%C File's last status change time 
%T File's last modification time 

人々はしばしば%のCが作成-時間を意味しなければならないことを考えると、しかし、あなたがabouve見るようにあなたが表示情報を使用できるように、作成時間が含まれていないファイルは、のために保存する3つのタイムスタンプを持っていますそれは 'status change time'です。これは、最後にファイルのアクセス許可が変更されたと思います。したがって、ファイル作成時間になる場合がありますが、保証されていない場合があります。 (sp)。

Windowsでは作成時間が保存されているため、マンページにはfindで取得できることが示されていません。誰でも?

こちらがお役に立てば幸いです。この目的のために

1

、私は通常、あなたがLSにあなたが必要とするすべての書式の引数を与えることができ

find . -type f -print0 | xargs -0 ls -ltrh 

を使用しています。

も参照してください:http://en.wikipedia.org/wiki/Xargs

関連する問題