web-dev-qa-db-ja.com

コマンドのデフォルトのソート順を見つける

linuxのfindコマンドによって返されるエントリのデフォルトのソート順は何ですか?

たとえば、私が発行した場合

find . -type f -name '*mp3' 

出力は、複数のサブフォルダーにまたがる複数のファイルで構成されています。ディレクトリが一覧表示されるデフォルトの順序は何ですか?同時に、個々のディレクトリ内のファイルがリストされるソート順は何ですか?

時々それは戻ります:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

最初にディレクトリBの内容がリストされ、次にディレクトリAの内容がリストされる方法を確認してください。同時に、ディレクトリA内では、ファイルがおかしな順序でリストされます。

31
Nasko

findは、アイテムがディレクトリエントリ内に格納されている順序でディレクトリツリーをトラバースします。これは、(ほとんどの場合)同じマシン上で実行間で一貫しており、削除されていない場合は基本的に「ファイル/ディレクトリの作成順序」になります。

ただし、一部のファイルシステムは、圧縮操作の一部として、またはエントリのサイズを拡張する必要があるときにディレクトリエントリを並べ替えます。そのため、「生の」順序が時間とともに変化する可能性は常にあります。一貫した順序が必要な場合は、出力を追加の並べ替えステージに送ります。

19
Vatine

findからの特定の出力順序に依存するべきではなく、代わりにsortおよび他の手段を使用して順序を明確に制御する必要があります。

私はそれぞれ1984/1991年からUNIX/Linuxで働いており、最初に教えられたコマンドが見つかりました。 Linux/GNUは、必要なほとんどすべてのものを現在のfindコマンドに組み込んでいるので、いじってみてください。

検索結果を並べ替えるのに役立つヒントをいくつか紹介します。 -printfオプションを使用すると、より複雑なソートとファイル情報の表示を可能にする多くのオプションが提供されます。このような問題に最適です。それで遊んで、何がうまくいくか見てみましょう。 -printfを使用すると、結果を好きなようにカスタマイズして区切ることができます。これは、結果を後処理する必要がある場合に役立ちます。これが誰かの役に立つことを願っています。

  1. -lsを使用し、ファイル名で並べ替える場合は、11番目のフィールドがファイル名なので、次のことができます。 sort -kオプションは、並べ替えに複数のフィールドを使用することもできます。

    / path -lsを見つけます|ソート-k11

  2. より細かい制御が必要な場合、つまり日付/時刻で昇順または降順で並べ替えるには、-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
3