web-dev-qa-db-ja.com

find-execでpvを使用します

次のコマンドを使用して、バックアップされたファイルの〜700 GiB)を確認します。

$ find -type f -exec md5sum {} + | sort > ~/checksums

これには何時間もかかるので、pvをコマンドに統合して進行状況を表示したいと思います。

私はこれを行うことができます:

$ find -type f -exec pv {} + | md5sum

ただし、すべてのファイルが連結されるため、チェックサムは1つだけになります。

では、どうすればpvを含めても、最後にチェックサムでいっぱいのテキストファイルを取得できますか?

2
EmmaV

そのような-execでパイプを使用できないため、最初のコマンドはまったく実行できないはずです(これは、 元の質問 のタイプミスだったようです)。

代わりに:

find . -type f -exec md5sum {} + | sort -o ~/checksums

または、pvを使用して、

find . -type f -exec md5sum {} + | pv | sort -o ~/checksums

上記の両方で、md5sumは、バッチで可能な限り多くのパス名を使用して呼び出されます。 sortは、findの出力(md5sumの出力)を取得し、指定されたファイル名に並べ替えます。 2番目のバリエーションでは、pvfindの間にsortを追加で挿入します。

パイプを呼び出すインラインシェルスクリプトに埋め込む必要があるため、個々のファイル-exec pv {} | md5sumを使用することはできません。ファイルごとに-exec。ただし、正しい-exec sh -c 'pv "$1" | md5sum' sh {} \;でさえ、生成されたmd5sum出力からファイル名を破棄するため、これも使用できません。 pvユーティリティは、catのドロップイン置換のように機能します。

4
Kusalananda