如何使用管道查看器(pv)测量压缩进度?

如何使用管道查看器(pv)测量压缩进度?

我一直在尝试跟踪管道中的数据进度,特别是在 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,但我将其保持在接近原始行的位置,以指出我认为可能缺少文件名,除非“路径”已经包含路径和文件名。

相关内容