在UNIX中重命名批处理文件

在UNIX中重命名批处理文件,unix,rename,Unix,Rename,我有一套文件如下: oldname_1.txt oldname_1.pdf oldname_1.bak 等等。。使用不同的扩展名,我需要将“oldname”重命名为“newname”,因此我尝试: rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.* 但这不起作用 有什么建议吗?首先,你应该具体说明“不起作用”的实际含义。它没用吗?它是否错误地重命名了它们?它能将电脉冲传送到你身体的某些私人部位吗?:-) 无论如何,我会从以下几点开始:

我有一套文件如下:

  • oldname_1.txt
  • oldname_1.pdf
  • oldname_1.bak
等等。。使用不同的扩展名,我需要将“oldname”重命名为“newname”,因此我尝试:

rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.*
但这不起作用


有什么建议吗?

首先,你应该具体说明“不起作用”的实际含义。它没用吗?它是否错误地重命名了它们?它能将电脉冲传送到你身体的某些私人部位吗?:-)

无论如何,我会从以下几点开始:

rename -v 's/^oldname/newname/' oldname_*.*
没有必要在实际表达式中包含通配符,特别是因为它的含义与您的想法不同(
xyz.*
表示
xyz
后跟零个或多个
字符,但这并不意味着
xyz.
后跟任何字符,
*
只是自找麻烦,因为这意味着任何字符都是零个或多个)

文件名的过滤由最后一个参数完成。因为您知道只有与该参数匹配的文件才会被重命名,所以您可以调整正则表达式以更改第一位


此外,请确保您拥有正确的
重命名
。Linux有一个不同的
重命名
,其语法不同:

rename oldname newname oldname_*.*
在这些系统中,regex变量通常被称为
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

重命名文件的一种方法:

for i in oldname*; do mv "$i" "${i/oldname/newname}"; done

是的,我的行没有任何作用。我也尝试过重命名-v's/^oldname/newname/'oldname***不幸的是,它也没有任何作用。我已经将权限更改为chmod 777,也没有更改。@madkitty,还有一点阅读和实验。你能重读一下答案吗?非常感谢你的回答,我会将此保留在文件中以供参考下一批要重命名的文件,您的解释非常有用:)请检查此处: