我编写了一个使用 7zip 备份目录的简单脚本。一切正常,但现在我想给它添加一些图形反馈,添加一个进度条。我知道我可以使用 zenity
来做到这一点,但是无论我尝试什么,我似乎都无法让它发挥作用。
我正在使用 fgrep
来查明新文件何时被压缩(“Compressing”是 7zip 在屏幕上打印的每一行的第一个词)以增加压缩率。具体的代码行如下:
7z a -t7z /home/user/Desktop/Backup.7z /home/user/Desktop/folder_to_backup -mx9 | fgrep Compressing | nl | awk '{print $1/$number_of_files*100}' | zenity --progress --percentage=0 --auto-close
运行这个会出现进度条,从0开始,但是没有进度显示:操作完成后,进度条突然跳到最后。
我已经用谷歌搜索了一段时间,但我唯一发现的是 zenity progress
似乎有一些问题 :D 非常感谢任何帮助!
最佳答案
看起来您没有在输出中获得命令的进度,通过运行不带 | 的命令来检查它zenity --progress --percentage=0 --auto-close
管道。
尝试这样的事情来获得你的输出,首先你需要 apt-get install screen
如果你没有安装它:
screen -L bash -c '(while :; do tail ~/screenlog.0 | grep -o "[0-9]*%" | tail -1; done | zenity --progress --auto-close &); 7z a "output.zip" "/path/to/input"'
我将分解命令中最重要的部分:
- screen -L 这个标志告诉
screen
命令开始一个新 session 并将所有终端输出记录到一个文件~/screenlog.0
默认。 - bash -c COMMAND1 生成一个子 shell 并在其中运行
COMMAND1
。 - (COMMAND2 &) 生成另一个将在后台启动
COMMAND2
的子 shell。 - while :; 开始无限循环。
- tail FILE 读取
FILE
的最后 10 行。 - grep -o 仅打印匹配行的匹配(非空)部分。
- [0-9]*% 后跟 % 符号的任何数字系列。
- tail -1 读取上一个管道命令的最后一行。
关于linux - 如何将值发送到 Zenity 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13994843/