在 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 中重命名批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

在bash中重命名文件名

如何在 Emacs 中重命名打开的文件?

在 Xcode 中重命名或重构文件

在 Git 中重命名文件后没有预期的日志 [重复]

如何在 .NET 中重命名文件?

如何在上传过程中重命名图像文件