">"を使用してxargs引数を文字列として別のコマンドに渡しますか?

">"を使用してxargs引数を文字列として別のコマンドに渡しますか?

私が複数のファイルを持っているとしましょう/tmp/

はい

find . -type f | xargs -iFILES

md5sum各ファイルで操作を実行し、.md5名前は同じですが、拡張子を持つファイルとして出力したいと思います。

find . -type f | xargs -iFILES md5sum FILES > FILES.md5

findコマンドで見つけた各ファイルに対してmd5ファイルを作成する必要があります。代わりに、すべてのファイルのチェックサムを含むFILES.md5ファイルをディスクに作成します。

FILESがFILESリテラル文字列の代わりに現在のファイル名を表すことをmd5sumコマンドにどのように通知できますか?

答え1

IOリダイレクトを処理するには、サブシェルを使用する必要があります。

find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'

答え2

GNU Parallelでは、次のことができます。

find . -type f | parallel md5sum {} \> {}.md5

md5sumを並列に実行すると、追加の利点が得られ、ドキュメントは次のようになります。

My brother's 12" records.txt

コマンドが競合しません。詳しくは、紹介ビデオをご覧ください。http://www.youtube.com/watch?v=OpaiGYxkSuQ

答え3

md5sum出力をファイルに送信することを示す方法が必要です。find(またはxargs)にはこの機能が組み込まれておらず、標準md5sum出力に印刷する方法だけがわかっているため、シェルリダイレクトが最も簡単な方法です。

他の理由により、一般的なケースではコマンドは機能しません。の出力形式はfindの入力形式ではなく、xargs空白またはを含むファイル名とは異なります\"'。代わりに使用してくださいfind -exec

find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;

関連情報