如何在 shell 脚本中正确设置 pv 大小

How to correctly set pv size in shell script

我正在编写备份脚本,希望看到 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. 修复了脚本中的印刷错误。确实可以,但是进度条不对

我发现了问题:$(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}"