带进度条的 Tar 备份

带进度条的 Tar 备份

我想在 tar 备份命令中添加一个进度条。我发现酒吧shell 脚本应该可以做到这一点,但我无法找出正确的命令。

sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz

使用上述命令,我能够显示一些信息,但还没有进度条。

答案1

抱歉,这是不可能的。从文件bar本身来看:

Synopsis:
  'bar' works just like 'cat', but shows a progress bar in ASCII art on stderr.
  The script's main function is meant to be usable in any Bourne shell to be
  suitable for install scripts without the need for any additional tool.

问题是,为了显示进度条,bar必须首先知道文件的大小。

为了提取一个档案,那没问题:如果backup.tar很大100 MiB并且50 MiB已经处理完毕,我们就在了50 %

然而,对于创造一个档案,bar从中读取stdin,对于所有实际目的来说都是无限的。作为文档说:

无限流并不好:条形图仅显示在 0% 和 100% 处。[...]


我能想到的唯一显示备份进度条的方法(除了编译自定义版本的焦油棒) 是:

  1. 计算文件的累计大小/media/data

  2. 逐个创建backup.tar并附加文件。/media/data

  3. 每个文件之后,计算当前百分比并显示。

  4. gzip backup.tar(你用于tar此目的)。

例子:

TOTAL=$(du -b /media/data | grep -oP "^\d+")
CURRENT=0
echo "Archiving:"
IFS="
"
for FILE in $(find /media/data -type f); do 
    tar rf backup.tar $FILE
    CURRENT=$(($CURRENT+$(du -b $FILE | grep -oP "^\d+")))
    echo -en "\r"$((100*($CURRENT-1)/$TOTAL+1))"%"
done
echo
echo "Compressing:"
bar backup.tar | gzip > backup.tar.gz
rm backup.tar

警告:

  • 这可能会减慢您的备份进度。
  • 文件名不能包含换行符。

相关内容