如何在 Linux 上重命名一组文件
创始人
2024-03-02 03:25:24
0

要用单个命令重命名一组文件,请使用 rename 命令。它需要使用正则表达式,并且可以在开始前告诉你会有什么更改。

几十年来,Linux 用户一直使用 mv 命令重命名文件。它很简单,并且能做到你要做的。但有时你需要重命名一大组文件。在这种情况下,rename 命令可以使这个任务更容易。它只需要一些正则表达式的技巧。

mv 命令不同,rename 不允许你简单地指定旧名称和新名称。相反,它使用类似于 Perl 中的正则表达式。在下面的例子中,s 指定我们将第一个字符串替换为第二个字符串(旧的),从而将 this.new 变为 this.old

$ rename 's/new/old/' this.new
$ ls this*
this.old

使用 mv this.new this.old 可以更容易地进行更改一个,但是将字符串 this 变成通配符 *,你可以用一条命令将所有的 *.new 文件重命名为 *.old

$ ls *.new
report.new  schedule.new  stats.new  this.new
$ rename 's/new/old/' *.new
$ ls *.old
report.old  schedule.old  stats.old  this.old

正如你所料,rename 命令不限于更改文件扩展名。如果你需要将名为 report.* 的文件更改为 review.*,那么可以使用以下命令做到:

$ rename 's/report/review/' *

正则表达式中的字符串可以更改文件名的任何部分,无论是文件名还是扩展名。

$ rename 's/123/124/' *
$ ls *124*
status.124  report124.txt

如果你在 rename 命令中添加 -v 选项,那么该命令将提供一些反馈,以便你可以看到所做的更改,或许会包含你没注意的。这让你注意到并按需还原更改。

$ rename -v 's/123/124/' *
status.123 renamed as status.124
report123.txt renamed as report124.txt

另一方面,使用 -n(或 --nono)选项会使 rename 命令告诉你将要做的但不会实际做的更改。这可以让你免于执行不不想要的操作,然后再还原更改。

$ rename -n 's/old/save/' *
rename(logger.man-old, logger.man-save)
rename(lyrics.txt-old, lyrics.txt-save)
rename(olderfile-, saveerfile-)
rename(oldfile, savefile)
rename(review.old, review.save)
rename(schedule.old, schedule.save)
rename(stats.old, stats.save)
rename(this.old, this.save)

如果你对这些更改满意,那么就可以运行不带 -n 选项的命令来更改文件名。

但请注意,正则表达式中的 . 不会被视为句点,而是作为匹配任何字符的通配符。上面和下面的示例中的一些更改可能不是输入命令的人希望的。

$ rename -n 's/.old/.save/' *
rename(logger.man-old, logger.man.save)
rename(lyrics.txt-old, lyrics.txt.save)
rename(review.old, review.save)
rename(schedule.old, schedule.save)
rename(stats.old, stats.save)
rename(this.old, this.save)

为确保句点按照字面意思执行,请在它的前面加一个反斜杠。这将使其不被解释为通配符并匹配任何字符。请注意,进行此更改时,仅选择了 .old 文件。

$ rename -n 's/\.old/.save/' *
rename(review.old, review.save)
rename(schedule.old, schedule.save)
rename(stats.old, stats.save)
rename(this.old, this.save)

下面的命令会将文件名中的所有大写字母更改为小写,除了使用 -n 选项来确保我们在命令执行之前检查将做的修改。注意在正则表达式中使用了 y,这是改变大小写所必需的。

$ rename -n 'y/A-Z/a-z/' W*
rename(WARNING_SIGN.pdf, warning_sign.pdf)
rename(Will_Gardner_buttons.pdf, will_gardner_buttons.pdf)
rename(Wingding_Invites.pdf, wingding_invites.pdf)
rename(WOW-buttons.pdf, wow-buttons.pdf)

在上面的例子中,我们将所有大写字母更改为了小写,但这仅对以大写字母 W 开头的文件名。

总结

当你需要重命名大量文件时,rename 命令非常有用。请注意不要做比预期更多的更改。请记住,-n(或者 --nono)选项可以帮助你避免耗时的错误。


via: https://www.networkworld.com/article/3433865/how-to-rename-a-group-of-files-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

不知道如何使用Python...
您可以使用paramiko库来连接到远程服务器并重命名文件。以下是...
2025-01-12 06:01:14
不支持嵌套重命名。
在许多编程语言中,不支持直接嵌套重命名。这意味着无法在同一作用域中...
2025-01-11 23:02:06
不要输入所有名称,重命名数...
要重命名数据框中的多个列向量,可以使用以下代码示例:# 创建一个数...
2025-01-10 22:31:32
不小心重命名了libc.s...
在无法在救援模式下进行chroot的情况下,你可以尝试以下解决方法...
2025-01-10 10:00:47
不使用新变量进行对象属性重...
在Python中,可以使用setattr()函数来动态地重命名对象...
2024-12-29 14:30:23
不使用for循环重命名命名...
可以使用列表推导式来重命名列表中的部分元素,而不使用for循环。下...
2024-12-28 17:01:59

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...