ディレクトリ ツリーで最新の 500 個のファイルを検索するための 1 行のシェル スクリプトまたは UNIX コマンドを探しています。主な制約は、POSIX に準拠する必要があることと、ディレクトリに大量のファイルを含めることができることです。
5 に答える
以下のリンクから、役立つ perl スクリプトを見つけました。
find . -type f -print | perl -l -ne ' $_{$_} = -M; END { $,="\n"; print sort {$_{$b} <=> $_{$a}} keys %_ }' | head -n 500
サブディレクトリと時刻を含むディレクトリ内の最新の変更されたファイルを再帰的に検索して一覧表示する方法は?
これ以上のコメントは大歓迎です。ありがとうございました。
探す 。-type f -print | perl -l -ne'$ {$ } = -M; END {$、= "\ n"; print sort {$ {$ b} <=> $ {$ a}}キー%_}'| ヘッド-n500
ソート$ {$a} <=> $ {$b}の場合は逆になります。
頭を避けることができます:print +(...)[0..499]
再帰呼び出しでの検索も:
perl -e 'sub R{($_)=@_;map{-d$_?&R($_):$_}<$_/*>}print$_,$/for(sort{-M$a<=>-M$b}R".")[0..499]'
またはunixcmdを使用する場合:多くの引数があるかどうかわからない場合は失敗する可能性があります
find . -type f -exec ls -1t {} + | head -500
find . -type f -print0 | xargs -0 ls -1t | head -500
find . -type f -exec stat -c %Y:%n {} \; |
sort -rn | sed -e 's/.*://' -e 500q
%Z
これは ctime でソートされます。これは、または%X
フォーマット文字列で変更できますが、 stat
POSIX ではありません。
シェルスクリプトでこれを行う 100% 信頼できる POSIX の方法はありません。
ただし、最後に変更されたファイルの内容または最後に変更されたファイルのいずれかで newest を定義すると仮定すると、POSIX C プログラムは簡単に実行できます。最後の作成時間を意味する場合、使用するファイル システムによっては、POSIX の方法はなく、おそらく解決策はまったくありません。