![如何使用管道查看器(pv)测量压缩进度?](https://linux22.com/image/1339552/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%AE%A1%E9%81%93%E6%9F%A5%E7%9C%8B%E5%99%A8%EF%BC%88pv%EF%BC%89%E6%B5%8B%E9%87%8F%E5%8E%8B%E7%BC%A9%E8%BF%9B%E5%BA%A6%EF%BC%9F.png)
我一直在尝试跟踪管道中的数据进度,特别是在 minecraft 服务器的大型初始化脚本中。我该如何使用pv
才能准确读取进度?
我尝试了以下命令,其中$WORLDBACKUPSIZE
是需要备份的文件夹的大小,$path
是应该备份到的路径,$MCPATH/${WORLDNAME[$INDEX]}
是应该备份的文件夹,但pv
由于大小是文件夹的大小,因此它在中途停止,并且它只计算通过的压缩字节数。
我希望它计算 tar 命令中压缩的字节数,这样我就可以使用原始大小作为进度表的结束标记。简而言之,我正在尝试打包一个文件夹并使用 监控进度pv
。用来告诉我估计百分比的总大小pv
是基于原始大小的,而 tar 命令运行时测量的大小是压缩大小,因此进度条会提前停止,最后完成的百分比取决于压缩文件夹的大小与原始文件夹的大小。
命令
WORLDBACKUPSIZE=`du -sk $WORLDSTORAGE/${WORLDNAME[$INDEX]} | cut -f 1`
用于测量我想要备份的文件夹。
命令
tar -hcjf - $MCPATH/${WORLDNAME[$INDEX]} | pv -reps ${WORLDBACKUPSIZE}k > $path
用于测量进度。我该如何重新安排它,以便通过输入 tar 命令的字节数而不是输出的字节数来测量进度?
答案1
你可以从一个简单的(但不是那么好,也许是无用的 Cat)开始:
cat "$MCPATH/${WORLDNAME[$INDEX]}" \
| pv -reps "${WORLDBACKUPSIZE}k" \
| tar -hcjf - > $path/somename
最后一行可能是tar -hcjf $path/somename
,但我将其保持在接近原始行的位置,以指出我认为可能缺少文件名,除非“路径”已经包含路径和文件名。