我使用以下命令来验证约 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
)并将其排序到给定的文件名中。第二种变体另外pv
在find
和 之间插入sort
。
你不能-exec pv {} | md5sum
用于个人文件因为管道需要嵌入到您-exec
为每个文件调用的内联 shell 脚本中。但即使是正确的-exec sh -c 'pv "$1" | md5sum' sh {} \;
也会从生成的输出中丢弃文件名md5sum
,因此也无法使用。该pv
实用程序就像cat
.