ディレクトリ内のすべてのファイルを再帰的に一覧表示し、変更時間で出力を並べ替えるにはどうすればよいですか?
私は通常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-
動作しますが、再帰的ではありません。
@ johnshen64が提案したようにstat
を使用するメソッドは次のとおりです
find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-
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
に関するその他の警告については、そのリンクも参照してください)。
find .
すべてのファイルを取得できるはずです。このようなもの:
find . -exec ls -dl '{}' \; | sort -k 6,7
必要に応じて調整する必要があります。
Unix Stack Exchangeサイトでの同様の質問に対するこの回答は、zshを使用していたので役に立ちました。