私が複数のファイルを持っているとしましょう/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"' {} \;