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

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

find出力をコマンドに渡す前に、アルファベット順にソートできる必要があります。間に入力| sort |できませんが、どうすればいいですか?

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

答え1

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

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

答え2

一部のバージョンにはNULL終了レコードを許可するオプションが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フラグを使用してソートから文字列を null で終了できます。

答え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.

関連情報