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


9

にたくさんのファイルがあるとします/tmp/

私がやります

find . -type f | xargs -iFILES

そしてmd5sum、各ファイルでaを実行して、同じ名前で.md5拡張子を付けたファイルに出力します。

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

これは、findコマンドで見つかったファイルごとにmd5ファイルを作成することになっています。代わりに、すべてのファイルのチェックサムを使用して、ディスク上に単一のFILES.md5ファイルを作成します。

md5sumコマンドに、FILESが現在のファイル名を表し、FILESリテラル文字列ではないことをどのように伝えますか?

回答:


4

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

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

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

7

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.