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
オプションを追加します。xargs
myCommand
答え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.