如何在 Linux 上重命名多个文件如何在 Linux 上重命名多个文件如何在 Linux 上重命名多个文件如何在 Linux 上重命名多个文件
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上重命名多个文件

问题:我知道我可以使用mv命令重命名文件。但是如果我想更改许多文件的名称怎么办?对每个这样的文件调用 mv 命令会很乏味。有没有更方便的方法来一次重命名多个文件?

在 Linux 中,当您想要更改文件名时,mv 命令即可完成工作。但是,mv 无法使用通配符重命名多个文件。有多种方法可以通过将 sed、awk 或 find 与 xargs 结合使用来处理多个文件。然而,这些 CLI 相当麻烦,而且用户界面不友好,如果不小心的话,很容易出错。您不想撤消对数千个文件所做的错误名称更改。

当涉及到重命名多个文件时,rename 实用程序可能是最简单、最安全且最强大的命令行工具。 rename 命令实际上是一个 Perl 脚本,并且预装在所有现代 Linux 发行版上。

这是rename命令的基本语法。


rename [-v -n -f] <pcre> <files>

<pcre> 是一个与 Perl 兼容的正则表达式 (PCRE),它表示要重命名的文件以及如何重命名。该正则表达式的形式为“s/old-name/new-name/”。

-v 选项显示文件名更改的详细信息(例如,XXX 重命名为 YYY)。

-n 选项告诉 rename 显示如何在不实际更改名称的情况下重命名文件。当您想要模拟文件名更改而不接触文件时,此选项非常有用。

-f 选项强制覆盖现有文件。

下面我们来看几个rename命令示例。

更改文件扩展名

假设您有许多扩展名为 .jpeg 的图像文件。您想要将这些图像的文件扩展名更改为*.jpg。以下命令将 *.jpeg 文件转换为 *.jpg。


$ rename 's/.jpeg$/.jpg/' *.jpeg

将大写字母转换为小写字母,反之亦然

如果您想更改文件名中的文本大小写,可以使用以下命令。

要将所有文件重命名为小写:


# rename 'y/A-Z/a-z/' *

要将所有文件重命名为大写:


# rename 'y/a-z/A-Z/' *

更改文件名模式

现在让我们考虑涉及子模式的更复杂的正则表达式。在 PCRE 中,圆括号内捕获的子模式可以由前面带有美元符号的数字引用(例如,$1、$2)。

例如,以下命令会将 img_NNNN.jpeg 重命名为 dan_NNNN.jpg。


# rename -v 's/img_(d{4}).jpeg$/dan_$1.jpg/' *.jpeg

img_5417.jpeg renamed as dan_5417.jpg
img_5418.jpeg renamed as dan_5418.jpg
img_5419.jpeg renamed as dan_5419.jpg
img_5420.jpeg renamed as dan_5420.jpg
img_5421.jpeg renamed as dan_5421.jpg

下一个命令会将 img_000NNNN.jpeg 重命名为 dan_NNNN.jpg。


# rename -v 's/img_d{3}(d{4}).jpeg$/dan_$1.jpg/' *jpeg

img_0005417.jpeg renamed as dan_5417.jpg
img_0005418.jpeg renamed as dan_5418.jpg
img_0005419.jpeg renamed as dan_5419.jpg
img_0005420.jpeg renamed as dan_5420.jpg
img_0005421.jpeg renamed as dan_5421.jpg

在上述两种情况下,子模式“d{4}”捕获四个连续数字。捕获的四位数字将被称为 $1,并用作新文件名的一部分。

©2015-2025 艾丽卡 support@alaica.com