在UNIX中重命名批处理文件

时间:2012-09-06 02:36:48

标签: unix rename

我有一组文件如下:

  • oldname_1.txt
  • oldname_1.pdf
  • oldname_1.bak

等..每个都有不同的扩展名,我需要用“newname”重命名“oldname”,所以我试过了:

rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.*

但这不起作用..

有什么建议吗?

2 个答案:

答案 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