web-dev-qa-db-ja.com

ファイルを再帰的にリストし、変更時間で並べ替える方法は?

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

私は通常ls -lhtcを使用しますが、すべてのファイルを再帰的に見つけるわけではありません。 LinuxとMacを使用しています。

Mac OSXのls -l

-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-

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

13
qazwsx

@ johnshen64が提案したようにstatを使用するメソッドは次のとおりです

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

find-printfを使用して、適切な日付形式で並べ替えます。

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

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

分数の2番目の部分(とにかくファイルシステムに実装されていないことが多い)が気に入らない場合の例:

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

EDIT:Macの標準のfindには-printfがありません。しかし、それは難しいことではありません install GNU Macで見つける (Mac/Linuxの互換性とxargsに関するその他の警告については、そのリンクも参照してください)。

12

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

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

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

0
johnshen64

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

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

0
Brad Parks