web-dev-qa-db-ja.com

「find」の出力を並べ替えますか?

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

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

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

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

sortの一部のバージョンには-zオプション。nullで終了するレコードを許可します。

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が引数付きで呼び出されるようにします。

62
Arcege

Sort#には-nフラグが必要だと思います#

男の並べ替えによると:

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

編集

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

5
whoami

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

2
Ole Tange