我有一组文件如下:
等..每个都有不同的扩展名,我需要用“newname”重命名“oldname”,所以我试过了:
rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.*
但这不起作用..
有什么建议吗?
答案 0 :(得分:4)
重命名文件的一种方法:
for i in oldname*; do mv "$i" "${i/oldname/newname}"; done
答案 1 :(得分:3)
首先,你应该真正指出“不起作用”实际意味着什么。它什么都不做?它是否错误地重命名?它是否会向解剖结构的某些私处传递电脉冲? : - )
无论如何,我会从:
开始rename -v 's/^oldname/newname/' oldname_*.*
没有必要在实际表达式中包含通配符,尤其是,因为它意味着与您的想法不同(xyz_*
表示xyz
后跟零或更多_
个字符,不表示xyz_
后跟任何内容,而.*
只是要求麻烦,因为这意味着任何字符为零或更多。< / p>
文件名的过滤由最终参数完成。既然您知道只重命名与该参数匹配的文件,您可以定制正则表达式来更改第一位。
此外,请确保您拥有正确的rename
。 Linux可以使用不同的rename
语法:
rename oldname newname oldname_*.*
在这些系统中,正则表达式变体通常称为prename
。
最后,请原谅可能是一个愚蠢的问题,你确定这些文件是你期望的名字吗?一个简单的ls -al oldname*
应该显示这个。
顺便说一句,这在我的Debian框下运行正常:
pax> touch oldname_1.txt oldname_1.pdf oldname_1.bak
pax> ll *name*
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.bak
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.pdf
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.txt
pax> rename -v 's/^oldname/newname/' oldname_*.*
oldname_1.bak renamed as newname_1.bak
oldname_1.pdf renamed as newname_1.pdf
oldname_1.txt renamed as newname_1.txt
pax> ll *name*
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.bak
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.pdf
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.txt