这合适的方式要在 Bash 中迭代目录中的文件,请使用“for 循环”和 glob,如下所示:
for f in *.jpg; do
echo "- Processing file: $f"
done
但是如何检索文件的总数和循环交互的当前索引?我需要总计数,而不是累积计数来显示进度。
答案1
我会将文件列表存储在大批,这样您就不必读取文件系统两次,从而提高性能并减少潜在的竞争条件。然后使用另一个变量作为索引。
files=(*.jpg)
total=${#files[@]}
i=0
for f in "${files[@]}"; do
i=$(( i + 1 ))
echo index $i
echo total $total
echo "- Processing file: $f"
done
解释
files=(*.jpg)
:将 glob 存储到数组中$files
total=${#files[@]}
:将总数读入$total
i=0
:初始化$i
为0。i=$(( i + 1 ))
$i
:每个循环加1
这假定“第一个”循环为 1。根据您的意见,您可能希望从 0 开始。