在 UNIX 中重命名批处理文件
Posted
技术标签:
【中文标题】在 UNIX 中重命名批处理文件【英文标题】:Rename batch of file in UNIX 【发布时间】:2012-08-30 19:26:31 【问题描述】:我有一组文件如下:
oldname_1.txt oldname_1.pdf oldname_1.bak等等..每个都有不同的扩展名,我需要用“newname”重命名“oldname”所以我尝试了:
rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.*
但这不起作用..
有什么建议吗?
【问题讨论】:
查看这里:theunixshell.blogspot.com/2013/01/… 【参考方案1】:重命名文件的一种方法:
for i in oldname*; do mv "$i" "$i/oldname/newname"; done
【讨论】:
【参考方案2】:首先,您应该明确说明“不起作用”的实际含义。它什么都不做吗?它会错误地重命名它们吗?它是否会向您身体的某些私密部位提供电脉冲? :-)
无论如何,我会从:
rename -v 's/^oldname/newname/' oldname_*.*
没有必要在实际表达式中包含通配符,尤其是,因为它的含义与您的想法不同(xyz_*
表示 xyz
后跟零个或多个 _
字符,它确实不是意味着xyz_
后面跟着任何东西,而.*
只是在自找麻烦,因为这意味着零个或多个任何字符)。
文件名的过滤由最后一个参数完成。由于您知道只有与该参数匹配的文件才会被重命名,因此您只需定制正则表达式以更改第一位。
此外,请确保您拥有正确的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
【讨论】:
是的,我的线路什么也没做。我也试过 rename -v 's/^oldname/newname/' oldname*.* 不幸的是它也没有做任何事情..我已经将权限更改为 chmod 777,也没有任何更改。 @madkitty,更多的阅读和实验。你能重读一下答案吗? 非常感谢您的回答,我将把它保存在文件中以便下一批文件重命名,您的解释非常有用:)以上是关于在 UNIX 中重命名批处理文件的主要内容,如果未能解决你的问题,请参考以下文章