我在重命名多个文件时遇到了问题,需要用旧名称的前 10 个字符替换名称。我尝试在互联网上寻找解决方案,但没有找到答案。
例子:
原始文件名:
1208605001abAcd.jpg
1201230111FbcAdee.jpg
11512345714x611aaa.jpg
我想要实现的目标:
1208605001.jpg
1201230111.jpg
1151234571.jpg
答案1
你可以试试:
rename -n 's/(.{10}).*(\.jpg)$/$1$2/' *.jpg
例子:
$ rename -n 's/(.{10}).*(\.jpg)$/$1$2/' *.jpg
11512345714x611aaa.jpg -> 1151234571.jpg
1201230111FbcAdee.jpg -> 1201230111.jpg
1208605001abAcd.jpg -> 1208605001.jpg
该-n
选项仅模拟命令,以便您可以验证更改。 请在不使用此选项的情况下运行以真正进行更改。
正则表达式(.{10}).*(\.jpg)
包括:
.{10}
- 任意 10 个字符,一组(…)
,后跟.*
- 任意数量的任意字符,后跟\.jpg$
$
-第二组中文件名末尾的扩展名 ( )
替换$1$2
只是第一组,然后是第二组。
答案2
你只用 bash 就可以做到:
for FILE in *.jpg ; do mv "${FILE}" "${FILE:0:10}.jpg" ; done
只需一点工作,您就可以获得文件扩展名并自动添加到新名称。
答案3
如果您使用zsh
:
zmv '(*).(*)' '${1:0:10}.$2'
如果尚未完成,您可能需要先运行:
autoload zmv