如何将两个 bash 命令(创建 tar 存档并打印 tar 文件的大小)同时加入到 运行?

How to join two bash commands (creating tar archive and print the size of the tar file) to run in the same time?

我想做一个 bash 脚本,它将创建一个大的 tar 文件存档,并将每 5 秒打印一次 tar 文件的大小。 例如,创建存档需要 60 秒,屏幕上的大小为每 5 秒 tar 文件打印屏幕。

watch 是相关命令。示例脚本:

#!/bin/bash

refresh=5 # seconds

archive=
shift

watch -n "$refresh" du -h "$archive" &
tar czf "$archive" "$@"
kill $!

用法:./watch-tar my-archive-name.tar.gz /my/path/1 ...

这将重复 du -h 以获取文件大小,直到 tar 完成,并且 watch 被终止。

还有tar caf根据存档名称中给定的扩展名设置压缩格式。

你可能想使用循环来避免文件未找到错误(因为 watch 在文件存在之前开始),虽然我在测试时没有得到。

# replace watch ... & with:
until
    test -e "$archive" &&
    watch -n "$refresh" du -h "$archive"
do
    sleep 0.2
done &