微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux Bash使用进度条迭代文件夹

我正在写一个脚本来处理文件夹。 运行时间相当长,所以我想添加一个进度条。

这是迭代:

for file in */ do #processing here,dummy code sleep 1 done

一个柜台,并知道文件夹的数量将是一个解决scheme。 但我正在寻找一个更通用和更短的解决scheme…

我希望有人会有一个想法。 感谢您的关注,

检查文件是否是C中的特定types

在迭代文本文件上运行批处理命令

linux迭代目录中的文件

在Windowsbatch file中循环

朱利安

编辑:

我得到这个解决scheme,做我想做的,真的是graphics化的:

#!/bin/bash n_item=$(find /* -maxdepth 0 | wc -l) i=0 for file in /* do sleep 1 #process file i=$((i+1)) echo $((100 * i / n_item)) | dialog --gauge "Processing $n_item folders,the current is $file..." 10 70 0 done

但是,我会继续fedorqui的解决scheme,不采取所有的屏幕。

非常感谢您的宝贵时间

根据我们发表的结果, 如何打印出同一行,覆盖以前的行? 我带来了这个结果:

#!/bin/bash res=$(find /* -maxdepth 0 | wc -l) echo "found $res results" i=1 for file in /* do echo -n "[" for ((j=0; j<i; j++)) ; do echo -n ' '; done echo -n '=>' for ((j=i; j<$res; j++)) ; do echo -n ' '; done echo -n "] $i / $res $file" $'r' ((i++)) sleep 1 done

$ ./a found 26 results [ => ] 2 / 26 /boot [ => ] 16 / 26 /root

基于fedorqui的惊人的解决方案,我提出了一个功能,可以很好地处理任何循环。

function redraw_progress_bar { # int barsize,int base,int i,int top local barsize=$1 local base=$2 local current=$3 local top=$4 local j=0 local progress=$(( ($barsize * ( $current - $base )) / ($top - $base )) echo -n "[" for ((j=0; j < $progress; j++)) ; do echo -n '='; done echo -n '=>' for ((j=$progress; j < $barsize ; j++)) ; do echo -n ' '; done echo -n "] $(( $current )) / $top " $'r'

}

所以你可以很容易地做循环

for (( i=4; i<=20 ; i+=2 )) do redraw_progress_bar 50 4 $i 20 $something $i done echo $'n'

如果你想要一个图形化的进度条(GTK +),看看zenity:

#!/bin/bash ( for i in {0..5} do echo $((i*25)) echo "#Processing $((i+1))/5" sleep 1 done ) | zenity --progress --width=400 --title="Please wait" --auto-close

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐