我在文件夹中有几个.jpg图像,其名称如下:
20140331_134927.jpg
20140331_124933.jpg
20140331_124933.jpg
etc..
我想将它们重命名为:
Agra-1.jpg
Agra-2.jpg
Agra-3.jpg
etc..
我尝试运行以下脚本(存储为my.sh):
for files in *.jpg; do
i=1
echo mv "$files" "Agra-$i.jpg"
i=$((i+1))
done
但是,如果我在没有回声的情况下运行它,所有文件都将重命名为“Agra-1.jpg”
为什么这不能像我期望的那样起作用?如何写出来?
答案 0 :(得分:5)
将作业放出循环:
i=1 # only once
for files in *.jpg; do
mv "$files" "Agra-$i.jpg"
let i++
done
答案 1 :(得分:0)
这是一个例子 - 您应该在循环之外声明计数器变量,否则它将在每次迭代时重置为其初始值:
内圈:
$ for file in *; do i=1; echo $i; (( i++ )); done
1
1
1
外循环:
$ i=1
$ for file in *; do echo $i; (( i++ )); done
1
2
3