我正在尝试重命名确切文件夹中的文件。 我有一套:
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
我知道,这是一个全球性问题,但不知道如何解决。
答案 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
$