将 pv 与 find -exec 一起使用

将 pv 与 find -exec 一起使用

我使用以下命令来验证约 700 GiB 的备份文件:

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

这需要很多小时,所以我想集成pv到命令中来显示进度。

我可以这样做:

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

但它连接了所有文件,只产生一个校验和。

那么我怎样才能包含pv并仍然在最后得到一个充满校验和的文本文件呢?

答案1

你的第一个命令根本不应该运行,因为你不能使用-exec类似的管道(这显然是原问题)。

反而:

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

或者,与pv,

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

在上述两种情况下,md5sum都会使用尽可能多的路径名批量调用。 sort将获取 的输出find(即 的输出md5sum)并将其排序到给定的文件名中。第二种变体另外pvfind和 之间插入sort

你不能-exec pv {} | md5sum用于个人文件因为管道需要嵌入到您-exec为每个文件调用的内联 shell 脚本中。但即使是正确的-exec sh -c 'pv "$1" | md5sum' sh {} \;也会从生成的输出中丢弃文件名md5sum,因此也无法使用。该pv实用程序就像cat.

相关内容