我正在比较两个 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
另一个类似的命令cat
是pv
.它将文件内容泵入 stdout,然后通过管道输送到另一个程序 (md5sum),并通过 stderr 输出进度指示。虽然它一次只适合 1 个文件。使用类似pv /usb1/bigfile1 | md5sum