在 Bash 中迭代文件并获取索引和计数

在 Bash 中迭代文件并获取索引和计数

合适的方式要在 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 开始。

相关内容