通过管道传送时的 md5sum 进度

通过管道传送时的 md5sum 进度

我正在比较两个 USB 设备,rsync以便md5sum /usb1/* /usb2/* | sort驱动器根目录下的所有文件都计算其 md5 和,然后按 md5sum 对输出进行排序。md5sum /usb1/bigfile1 /usb1/bigfile2 /usb2/bigfile1 /usb2/bigfile2例如,整个命令扩展为。我的不耐烦让我想知道进展如何,即现在正在处理哪个文件?因为它通过管道传输到另一个命令,所以我没有 stdout 或 stderr 来查看它正在对 atm 进行哈希处理的文件。是否有某种命令可以报告另一个命令正在执行的操作现在

我将其标记为“信号”,但我对信号了解不多,无法轻松地用信号中断 md5sum 进程。我记得可以发送信号以dd使其报告进度。

答案1

您可以使用progress为了这:

progress -p $(pgrep md5sum)

或者,如果您想持续监控md5sum

progress -m -p $(pgrep md5sum)

无需使用外部工具,您可以md5sum通过列出 来了解 Linux 上当前正在访问哪些文件,并通过查看 中的文件/proc/$(pgrep md5sum)/fd来查找有关文件描述符的更多信息(包括它们的位置,显示已处理的数量) 。md5sum/proc/$(pgrep md5sum)/fdinfo

正如您提到的,dd将在收到时打印出进度报告,但这是由而不是一般信号介导功能SIGUSR1实现的功能。dd默认情况下,发送SIGUSR1到进程将杀死它。

答案2

另一个类似的命令catpv.它将文件内容泵入 stdout,然后通过管道输送到另一个程序 (md5sum),并通过 stderr 输出进度指示。虽然它一次只适合 1 个文件。使用类似pv /usb1/bigfile1 | md5sum

相关内容