ファイルを再帰的にリストし、変更時間でソートする方法は?


12

ディレクトリの下のすべてのファイルを再帰的に一覧表示し、変更時間で出力をソートするにはどうすればよいですか?

私は通常使用しますls -lhtcが、すべてのファイルを再帰的に検索しません。LinuxとMacを使用しています。

ls -l Mac OS Xでは

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

日付部分が一貫していない、または整合していない場合、ソリューションではこれを考慮する必要があります。

部分的な解決策

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

動作しますが、再帰的ではありません。


Linuxを使用していると仮定しますが、質問で、またはできればタグとしてOSを明示的に指定する必要があります。
EBGreen

回答:


2

stat@ johnshen64が推奨するように使用する方法を次に示します

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-OS X上のファイルの絶対パスのみを印刷します
。– Lri

どのバージョンstatを使用していますか?上記の形式は機能しませんでした。次を使用する必要がありましたfind . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-。これはstat (GNU coreutils) 8.23
user84207

11

使用find-printfかつ合理的な日付形式での並べ替え:

find -type f -printf '%T+\t%p\n' | sort -n

これにより、プロセスフォークが最小限に抑えられるため、最速になります。

小数部分が気に入らない場合の例(とにかくファイルシステムに実装されていないことがよくあります):

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

編集:find Macの標準にはがありません-printf。ただし、GNU findをMacインストールすることは難しくありません(Mac / Linuxの互換性に関する注意事項については、そのリンクも参照してくださいxargs)。


0

find .すべてのファイルを取得できるはずです。このようなもの:

find . -exec ls -dl '{}' \; | sort -k 6,7

必要に応じて調整する必要があります。


EBGreenが言ったように、lsはWindows PSのエイリアスであるため、sort-objectを使用し、子アイテムを再帰的に取得する必要がある場合でも、それがLinuxであると仮定しますが、考え方は同じです。
johnshen64

Macで日付が年の一部を欠くことがある場合、本当に正しく動作しますか?
qazwsx

あなたが正しい、最近のファイルの日付表示は物事を台無しにします。その場合は、代わりにstatを使用して正確にフォーマットされた日付を取得する必要があります。私のファイルはすべて非常に古いので、コマンドは正常に機能しました。そのため、tune句を追加しました:-)
johnshen64

@ johnshen64:lsLinuxには、--time-formatファイルの最新の日付と古い日付の両方が同じ形式で表示されるようにするオプションがあります。
RedGrittyBrick

ああ、ありがとう、あなたは正しい、ちょうどそれを使用していません。statを使用するよりもはるかに簡単です。--time-styleと呼ばれます。
-johnshen64

0

Unix Stack Exchangeサイトでの同様の質問に対するこの回答は、私がzshを使用していたので役に立ちました。

変更日でソートされたファイルを再帰的にリストする方法(statコマンドは利用できません!)


これは実際にはコメントであり、元の質問に対する答えではありません。いつでも自分の投稿にコメントすることができ、十分な評判たら、どの投稿にもコメントできます。コメントするには50の評判が必要な理由を
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.