我有很多这样的文件:
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 做到这一点?
我有很多这样的文件:
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 做到这一点?
做:rename -v
。如果它会输出:
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
这个检查是因为至少有两个不同的重命名工具,具有非常不同的功能。我拥有的解决方案需要重命名来处理 perlexpr。
那么你也能:
rename 's/^(\d+)/5000000+$1/e' *.jpg
一种仅使用的方法bash
for file in *.jpg; do
number=${file%_*}
therest=${file#$number}
mv "$file" "$((number+5000000))$therest"
done
笔记:
*.jpg
将扩展为.jpg
当前目录中的文件列表(参考:文件名扩展)。${file%_*}
删除_
文件名中的所有内容并将其返回。(参考:Shell 参数扩展)${file#$number}
number
从文件名的开头删除变量的内容并返回它。(参考:Shell 参数扩展)$((number+5000000))
计算内部的算术表达式并返回结果(参考:算术扩展)$filename = "13831_1.jpg";
$org = explode("_".$filename);
$addnumber = 5000000+$org[0];
$string = implode("_",$addnumber);