使用计数器BASH以升序重命名文件

时间:2014-04-03 12:08:47

标签: bash

我在文件夹中有几个.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”

为什么这不能像我期望的那样起作用?如何写出来?

2 个答案:

答案 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