「検索」の出力をソートしますか?


77

findコマンドにパイプする前に、出力をアルファベット順にソートできる必要があります。| sort |間の入力が機能しなかったので、どうすればよいですか?

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

回答:


52

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

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

58

の一部のバージョンに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ます。


良いもの(2つ?)...しかし、興味深いことに、2つのメソッドの処理方法は.異なります... sortリストの最後に表示されます... pythonトップに並べ替えられます。(たぶんpythonでソートLC_COLLATE=C
-Peter.O

-t \0ソートのオプション(-z同義語)もあります
ハビエル

1
これらすべての|sortソリューションの問題は、-execもう使用できないことです。OK、与えられたあなたの文を書き換えることが可能であるが-exec、それはで動作するようにxargs質問が、あり、どのような「ミニスクリプト」について?(sh -c ...複数のコマンドで「sh -c」ミニスクリプトを変換して、xargs(可能であれば)つまり
シンタックスエラー

@syntaxerror:xargsでsh -cを使用するとどのような問題がありますか?printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
ロジャーパテ

4

-nsort#のフラグが必要だと思います

男のソートによると:

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

編集する

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


まあ、それprint0はファイル名をスペースで区切っているように見えますが、それは残念ながら私のコマンドに渡す必要があるものです
産業用

1

GNU Parallel http://www.gnu.org/software/parallel/がインストールされている場合、これを行うことができます。

find folder1 folder2 -name "*.txt" -print | 
  sort |
  parallel myCommand

GNU Parallelは次の方法で簡単にインストールできます。

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

詳細については、GNU Parallelのイントロビデオをご覧くださいhttps : //www.youtube.com/playlist?list=PL284C9FF2488BC6D1


GNU Parallelを使用する理由は何ですか?それをスピードアップするには?
ピーターモーテンセン14

それと、\ 0で区切られたレコードを台無しにする必要はありません。
オレ丹下
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.