我需要一个使用 shred 输出的 zenity 进度条

Bla*_*Red 4 command-line zenity shredding

我想使用 的输出shred来制作进度条zenity

我的shred命令看起来像这样。

sudo shred -vfn 1 /dev/sda
Run Code Online (Sandbox Code Playgroud)

我是 Linux 新手。所以我可能错过了一个明显的解决方案。

Raf*_*ffa 7

进度条很简单...我想您要问的是如何使其更新并反映...的输出状态shred...好吧,您可以使用如下内容:

shred -vfn 1 file_toshred |& \
while read -r line; do awk '{print $NF+0}' <<<"$line"; done | \
zenity --progress
Run Code Online (Sandbox Code Playgroud)

注意:出于人们测试代码的安全原因,我更改sudo shred -vfn 1 /dev/sda为,但这也可以工作。shred -vfn 1 file_toshred

will|&管道stderr解析输出所需shred)以及stdoutBash 中的管道...对于不支持它的其他 shell,您可以使用它2>&1,并且可能将 herestring( <<<"$line") 语法更改为echo "$line" | ...如下所示:

shred -vfn 1 file_toshred 2>&1 | \
while read -r line; do echo "$line" | \
awk '{print $NF+0}'; done | \
zenity --progress
Run Code Online (Sandbox Code Playgroud)

要打印输出文本,您可以在循环echo "# $line";内部添加while ...,并且您可能希望zenity通过设置来扩展窗口以容纳输出,--width=如下所示:

shred -vfn 1 file_toshred 2>&1 | \
while read -r line; do echo "$line" | \
awk '{print $NF+0}'; echo "# $line"; done | \
zenity --progress --width="500"
Run Code Online (Sandbox Code Playgroud)