我有很多这样的文件:
13831_1.jpg
13838_1.jpg
138035_1.jpg
138037_1.jpg
138039_1.jpg
我需要为文件名的数量添加5000000的值。 结果应如下:
5013831_1.jpg
5013838_1.jpg
5138035_1.jpg
5138037_1.jpg
5138039_1.jpg
有没有办法用bash或perl来做?
答案 0 :(得分:8)
执行:rename -v
。如果输出:
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
此检查是因为至少有两种不同的重命名工具,具有非常不同的功能。而我所拥有的解决方案需要重命名处理perlexpr。
然后你可以:
rename 's/^(\d+)/5000000+$1/e' *.jpg
答案 1 :(得分:4)
仅使用bash
for file in *.jpg; do
number=${file%_*}
therest=${file#$number}
mv "$file" "$((number+5000000))$therest"
done
注意:
*.jpg
将展开到当前目录中的.jpg
个文件列表(参考:Filename expansion)。${file%_*}
删除文件名中_
之后的所有内容并将其返回。 (参考:Shell parameter expansion)${file#$number}
从文件名的开头删除变量number
的内容并将其返回。 (参考:Shell parameter expansion)$((number+5000000))
计算内部的算术表达式并返回结果(ref:Arithmetic expansion)答案 2 :(得分:-3)
$filename = "13831_1.jpg";
$org = explode("_".$filename);
$addnumber = 5000000+$org[0];
$string = implode("_",$addnumber);