我有一个例子,其中的for loop
非常耗时,所以我想使用tqdm
来创建一个好看的进度条,就像在Python中一样。但是我无法找到任何方法来实现这一点。
for f in `find mydir -name *.jpg -print`; do cp $f images/${f//\//_}; done
如何为此循环获取进度条?
我有一个例子,其中的for loop
非常耗时,所以我想使用tqdm
来创建一个好看的进度条,就像在Python中一样。但是我无法找到任何方法来实现这一点。
for f in `find mydir -name *.jpg -print`; do cp $f images/${f//\//_}; done
tqdm
的自述文件表明将其作为 bash 命令使用可以正常工作,例如:$ seq 9999999 | tqdm --bytes | wc -l
75.2MB [00:00, 217MB/s]
9999999
$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \
> backup.tgz
32%|██████████▍ | 8.89G/27.9G [00:42<01:31, 223MB/s]
tqdm
显示进度条是依赖于给定命令的信息来构建进度条的,而 cp
并没有提供(即使使用 cp -v
也不会发送缓冲信息,因此只有当 cp
完成时才会显示进度条)。rsync --progress
或者 pv
命令。rsync
,解决您问题的命令可以是以下内容:rsync -avzh --progress **/*.jpg images/
要在Bash循环中使用tqdm
,需要:
done
之后添加tqdm
。在您的情况下:
total=1000
for f in `find mydir -name *.jpg -print`; do echo $f; cp $f images/${f//\//_}; done | tqdm --total $total >> /dev/null
Loop_array=(`find mydir -name *.jpg -print`);
Total_loop_num=${#Loop_array[*]};
for((i=0;i<$Total_loop_num;i++))
do
echo -ne "Progress: $[ ($i+1)*100/$Total_loop_num ]%\r";
f=${Loop_array[$i]};
cp $f images/${f//\//_};
done;
echo "Loop finished.";
for((i=0;i<120000;i++))
do
echo -ne "Progress: $[ ($i+1)*100/120000 ]%\r";
done;