我有一个目录,其中的文件夹按顺序编号为 1-1000,但是我想对此目录中的某些文件夹执行操作。即文件夹1-50。如何定义循环的起点和终点?
到目前为止,我有一个这样的脚本:
a=1
b=1
for i in ~/PATH/*/ ;do
(cd $i/ && action)
echo "completed"
a=`expr $a + $b`
echo "Next Folder"
done
我可以通过更改 a= 来定义循环的开始,但我不确定如何定义循环的结束?按照目前的情况,它将继续遍历该目录中的所有文件夹。谢谢 :)
答案1
使用以下命令seq
生成要迭代的列表:
for nn in $(seq 1 50) ; do
(cd someprefix/$nn && action)
done
或者,如果您的 shell 支持大括号扩展:
for nn in {1..50} ; do
(cd someprefix/$nn && action)
done
答案2
Bash 允许使用类似于标准 Cfor
循环的循环:
for (( i = 1; i <= 50; ++i )); do
( cd $i && action )
done
更改cd $i
为cd "$HOME/PATH/$i"
您的目录的路径或任何路径。
答案3
#!/bin/bash
a=1
b=1
cd ~/PATH/
for i in $(ls -v) ;do
(cd $i/ && action) && echo "completed" || echo "error"
a=$((a+b)); [ "$a" -gt 50 ] && break
echo "Next Folder"
done
答案4
你甚至可以做一个 while 循环:
a=1
while [ $a -le 50 ]; do
(cd $a/ && action)
a=$((a+1))
done
或者,另一种选择:
a=1
while (( ++a<=50 ));do
(cd $a/ && action)
done