「find -print0」の出力を「sort」コマンドにパイプしてソートする

「find -print0」の出力を「sort」コマンドにパイプしてソートする

find出力をコマンドにパイプする前に、アルファベット順に並べ替える必要があります。between| sort |を入力しても機能しないので、どうすればよいでしょうか。

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand

答え1

find通常どおり使用し、行を NUL で区切ります。GNU はsort-z スイッチを使用してこれらを処理できます。

find . -print0 | sort -z | xargs -r0 yourcommand

答え2

の一部のバージョンには、ヌル終了レコードを許可するオプションがsortあります。-z

find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand

さらに、これを実行するための高レベルのスクリプトを作成することもできます。

find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand

引数付きで呼び出されることを確認するには、-rオプションを追加します。xargsmyCommand

答え3

-nソート用のフラグが必要だと思います#

男性の種類別:

-n, --numeric-sort
    compare according to string numerical value

編集

print0はこれと関係があるかもしれません。私はこれをテストしました。print0を取り除くと、フラグを使用してソート内の文字列をヌルで終了できます-z

答え4

一部の実装では、パラメータfindを介して直接順序付けされたトラバーサルをサポートしています-s

$ find -s . -name '*.json'

FreeBSDからマニュアルページ:

-s       Cause find to traverse the file hierarchies in lexicographical
         order, i.e., alphabetical order within each directory.  Note:
         `find -s' and `find | sort' may give different results.

関連情報