重命名多个文件

时间:2019-01-21 15:27:05

标签: bash shell

我正在尝试重命名确切文件夹中的文件。 我有一套:

1.png
2.png
3.png
...
n.png.

我需要更改名称,以便每个名称都变成i + 1,例如:

2.png
3.png
...
n+1.png

代码是:

var1=1 
for file in *.png
do
    mv "$file" "${file/((var1+1))/1}"
    ((i += 1))
done

我知道,这是一个全球性问题,但不知道如何解决。

2 个答案:

答案 0 :(得分:1)

以相反的方式进行操作,否则将丢失所有文件,但1.png除外,该文件已重命名为n+1.png

for n in $(seq n -1 1)
do
    mv "$n.png" "$((n + 1)).png"
done

答案 1 :(得分:0)

这是使用Perl单线的另一种方法。单线自动获得最高编号并循环打印mv语句。而且,您必须将其像| ksh一样通过管道传递到外壳上,才能重命名文件。

$ ls -1 *png
1.png
2.png
3.png
4.png
$ perl -ne ' BEGIN { @f= reverse sort(@ARGV) ; foreach my $x (@f) { $nf=$x;$nf=~s/(\d+)/eval($1+1)/ge; print "mv $x $nf\n" } } ' *.png
mv 4.png 5.png
mv 3.png 4.png
mv 2.png 3.png
mv 1.png 2.png
$