我想在 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% 处。[...]
我能想到的唯一显示备份进度条的方法(除了编译自定义版本的焦油棒) 是:
计算文件的累计大小
/media/data
。逐个创建
backup.tar
并附加文件。/media/data
每个文件之后,计算当前百分比并显示。
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
警告:
- 这可能会减慢您的备份进度。
- 文件名不能包含换行符。