0

我正在编写一个脚本,通过使用 tar、gzip 和 gpg 加密一堆文件夹,以及使用 du 和 awk 的 pv 来跟踪进度。这是导致问题的行

tar cf - "$f" | pv -s $(($(du -sk "$f" | awk '{print $1}') * 1024)) | gzip | gpg -e -o "$output/$(basename "$f").tar.gz.gpg"

这在大多数情况下都很有效。但是,如果输出文件已经存在,gpg 会提示用户,询问我们是否要覆盖该文件。在这种情况下,当脚本退出时,控制台会中断:我输入的内容不再出现,按 Enter 不会创建新行,等等。

如果 outfile 尚不存在,也不会出现问题,如果没有 du 和 awk 的-s选项pv丢失或计算(例如:$((500 * 500))。这不会破坏控制台,但显然进度条将完全关闭)

即使通过在脚本之外使用此命令行$f$output用所需选项替换和替换,该问题也是可重现的。

4

1 回答 1

1

也许这些变化中的一个或组合会有所帮助。

  1. 将gpg命令更改为写入stdout,重定向到您想要的文件:gpg -e -o - > "$output/$(basename "$f").tar.gz.gpg".
  2. 使用stat计算文件大小:stat -c "%s" "$f"

整行可能看起来像这样:

tar cf - "$f" | pv -s $(stat -c "%s" "$f") | gzip | gpg -e -o - > "$output/$(basename "$f").tar.gz.gpg"
于 2021-12-10T14:49:06.757 回答