在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
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,还有一点阅读和实验。你能重读一下答案吗?非常感谢你的回答,我会将此保留在文件中以供参考下一批要重命名的文件,您的解释非常有用:)请检查此处: