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