「find」がファイルを新しい順に検索するようにするにはどうすればよいですか?


17

タイムスタンプ(作成時)でソートされたサブディレクトリ内のファイルを検索したいのですが、最新のものが最初になります。

私はマニュアルページを見ましたが、タイムスタンプでソートするのではなく、タイムスタンプでフィルタリングできるように思われます。

これfindを達成するためにどのオプションを渡すことができますか?あるいは、sortタイムスタンプで並べ替えるなど、別のツールとどのように組み合わせることができますか?


1
find深さ優先検索と幅優先検索のどちらを選択するかを超えて、特定の並べ替え順序では何も実行できません。
ジョナサンレフラー

@ merlin2011、ここで回答の選択を確認してください-のfind単一インスタンスに渡すことができるよりも多くのファイルが見つかった場合、現在選択されている回答はバグがあります(実際には正しくソートされない出力を生成します)ls
チャールズダフィー

@CharlesDuffy、メモをありがとう!受け入れられた回答を更新しました。
merlin2011

回答:


32

Paulのソリューションは一般的には問題ありませんが、単純なものよりも多くのI / Oを伴います

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2

find百万ものファイルが返されたらどうなりますか?並べ替えは、それらすべてを1つの非常に長いリストとして並べ替えるのではありませんか?まだ効率的ですか?(各ディレクトリを個別にソートする代わりに。)
ピーターモーテンセン

1
改行のようなファイル名の変な文字では動作しません
ボリスブロスキー

2
これはuser7385の答えに対するコメントに値するだけですが、私はそれをする評判がありません。find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsの新しいバージョンにcutは-zオプションがあるため、改行を含むファイル名が機能します。
MattBlissett

I / Oの量は、この答えを好む主な理由すらありません。正確さははるかに重要な違いです。複数回起動xargs -0 ls -tするxargs必要のあるファイルが非常に多い場合、このアプローチは正しく機能しませんlsが、このアプローチは引き続き機能します。
チャールズダフィー

@PeterMortensen、「それらをすべて非常に長いリストとしてソートする」ことが、実際に正しい結果を返す唯一の方法です。また、他/受け入れ答えがない「ソート各ディレクトリ独立」のいずれか(1が再帰せずにソートのみ単一のディレクトリに望んでいた場合、1が使用する可能性の-maxdepth 1上でfind)。
チャールズダフィー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.