我正在写一个脚本来处理文件夹。 运行时间相当长,所以我想添加一个进度条。
这是迭代:
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] 举报,一经查实,本站将立刻删除。