我正在编写备份脚本,希望看到tar的正确进度。 脚本的主要部分:
backup_file="root-backup-$(date +%Y.%m.%d-%H.%M.%S).tar"
sudo -v
sudo mount /dev/vg/root /mnt
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s $(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"
但是pv显示快速填充进度条,然后数字增加到100000%。
Upd1。脚本中修复的错误。实际上它有效,但进度条不正确。
答案 0 :(得分:0)
我发现了问题:$(du -sb | grep -o '[0-9]*')
没有在新的子shell下调用 - 它正在调用命令替换。
因此,在运行sudo sh -c
之前,bash在某个当前目录中调用$(du -sb | grep -o '[0-9]*')
(在我的情况下更小)并将结果替换为字符串。
因此pv -s
的尺寸不正确并显示不正确的进度。
我决定使用单引号阻止替换周围的符号$
:
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s "'$'"(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"