解決策 1:
find
アイテムがディレクトリ エントリ内に格納されている順序でディレクトリ ツリーをトラバースします。これは、同じマシン上で実行ごとに(ほとんど)一貫しており、削除がない場合は基本的に「ファイル/ディレクトリの作成順序」になります。
ただし、一部のファイル システムでは、圧縮操作の一部として、またはエントリのサイズを拡張する必要がある場合に、ディレクトリ エントリの順序が変更されるため、「生の」順序が時間の経過とともに変化する可能性は常にわずかです。一貫した順序が必要な場合は、出力を追加の並べ替えステージにフィードします。
解決策 2:
find
からの特定の出力順序に依存するべきではありません 代わりに sort
を使用する必要があります および順序を明確に制御するその他の手段。
解決策 3:
私は 1984 年から 1991 年からそれぞれ UNIX/Linux で働いており、最初に教わったコマンドは find でした。 Linux/GNU は現在の find コマンドに必要なものをほとんどすべて組み込んでいるので、いろいろと試してみてください。
検索結果の並べ替えに役立つヒントをいくつか紹介します。 -printf オプションを使用すると、より複雑な並べ替えやファイル情報の表示を可能にする多くのオプションが提供されます。こんなお悩みに最適です。それを試して、何がうまくいくかを確認してください。 -printf を使用すると、必要に応じて結果をカスタマイズして区切ることができます。これは、結果の後処理が必要な場合に非常に役立ちます。これが誰かの役に立てば幸いです。
<オール>-ls を使用してファイル名で並べ替えたい場合は、11 番目のフィールドがファイル名であるため、次のように実行できます。 sort -k オプションは、複数のフィールドでソートすることもできます。
/path -ls | を見つけます。並べ替え -k11
より細かく制御したい場合、つまり日付/時刻で昇順または降順でソートする場合は、-printf "" オプションを使用します。詳細についてはマニュアルを参照してください。ただし、以下は非常に正確な小数秒で出力される例です。
日付/時刻の例:2016-09-17+12:09:57.9013929800
find /path -printf "%T+ %p\n" | sort -n # Ascending
find /path -printf "%T+ %p\n" | sort -nr # Descending
日付/時刻文字列に文字を使用せずにこれを行う別の方法は次のとおりです。
日付/時刻の例:20160917120013.8101685040
find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n