手动通过目录中的文件进行Bash循环

  • 本文关键字:文件 Bash 循环 bash
  • 更新时间 :
  • 英文 :


我的目录中有N个文件,我希望能够批量循环使用它们,例如,对于2/3/4个文件我希望执行一个命令。我看到了这样的东西,但不幸的是找不到。我将尝试使用伪代码来解释我想要什么,例如:

i=0
while i<N:
a=getFile(i)
b=getFile(i+1)
dosomething a
dosomething b
i+=2

有办法在Bash中做到这一点吗?现在我使用的是regexp,但它一次只得到一个文件(我使用*.ext,因为所有文件都有一个扩展名,所以如果更容易的话,你可以循环浏览答案中目录中的所有文件(:

for j in *.ext; do   
...
done

这与大多数编程语言相同:循环并存储项目,直到您有足够的项目:

declare -i count=0
declare -a files=()
for f in *.ext; do
files[count]="$f"
(( count += 1 ))
if (( count == 2 )); then
dosomething "${files[0]}"
dosomething "${files[1]}"
count=0
fi
done

如果你想一次处理2个以上的文件,我们也可以设计一些更通用的东西(调整batch的值(:

declare -i batch=3
declare -i count=0
declare -a files=()
for f in *.ext; do
files[count]="$f"
(( count += 1 ))
if (( count == batch )); then
for (( i=0; i<batch; i++ )); do
dosomething "${files[i]}"
done
count=0
fi
done

您可以将参数收集到一个数组中,然后以任何方式对其进行切片。

array=( *.ext )
for ((i=0; i<=${#array[@]}; i+=2)); do
dosomething "${array[i]}" "${array[i+1]}"
done

最新更新