如何在 Linux 中一次重命名多个文件
我相信你已经知道如何使用 mv 命令在 Linux 中重命名文件。你只需按照以下格式使用它:
mv old_file_name new_file_name
同样的mv 命令也用于重命名目录。这种方法没有什么问题。毕竟这是标准方法。
但是如果你需要重命名多个文件,该怎么办呢?逐个使用 mv 命令会花费大量时间,因此绝对应该避免。
您可以将 find exec 命令选项与 mv 命令一起使用来自动执行此过程。
但是让我告诉您一种基于正则表达式模式重命名文件的更简单的方法。
Linux 中的重命名命令
有一个名为 rename 的命令行实用程序,它允许您重命名所有与Perl 正则表达式形式中的特定模式匹配的文件。 rename 命令仅适用于文件名,而不适用于文件本身。
重命名命令的语法如下:
rename [options] perlexpr [files]
此‘重命名命令’具有以下选项:
- -v:详细模式。
- -n :无操作。显示将要重命名的文件,但不重命名这些文件。
- -o :不覆盖。不覆盖现有文件。
- -f :强制。覆盖现有文件。
- -s :不重命名符号链接,而是重命名其目标
请注意,rename 命令不是 Linux 发行版上预装的标准实用程序,如 mv 或cp 命令。您可能需要安装它。如果您是 Ubuntu 或 Debian 中的 sudo 用户,则可以使用此命令安装 rename:
sudo apt install rename
现在你一定想知道如何使用 rename 命令重命名文件。让我展示两个实际场景,这些场景中此命令将为你节省大量时间。
场景 1:在 Linux 中将所有文件名中的一个字符替换为另一个字符
想象一下,如果多个文件名中都有空格。在 Linux 中处理文件名中的空格是一场噩梦。这就是为什么没有经验丰富的用户会给文件命名时使用空格。
当然,你会想要删除空格并用下划线 (_) 替换它们。重命名命令在这里会非常方便。让我们看看如何操作。
要将当前目录中所有文件名称中的空格替换为下划线,您只需使用 renam 命令,如下所示:
rename 's/ /_/g' *
如果您对正则表达式稍微熟悉一点,您就会明白 s/ /_/g 正在搜索空格并用 _ 替换所有出现的空格。
有趣的部分是星号(*)。星号告诉您重命名当前目录中的匹配文件。
但是如果你还想重命名子目录中所有匹配的文件怎么办?在这种情况下,你可以使用两个星号,如下所示:
rename 's/ /_/g' **
场景 2:在 Linux 中一次更改多个文件的扩展名
这是另一种情况。您有多个文件,其名称类似于 my_file.xyz,并且您想重命名这些文件,使它们变成类似于 my_file.abc 的名称。
要一次更改多个文件的扩展名,可以按以下方式使用重命名命令:
rename 's/\.xyz$/.abc/' **
让我向您解释上述命令。
's/\.xyz$/.abc/' :这是一个正则表达式,表示用 .abc 替换行尾的 .xyz 字符。附加的 \ 用于转义 . ,否则,它将意味着匹配 xyz 之前的任何字符。
** 表示查找当前目录及其子目录。
您喜欢重命名命令吗?
很少有人知道 rename 命令。这或许也是因为 rename 在许多 Linux 系统上并不是一个事实上的命令。
然而,我发现这个命令在同时处理多个文件的重命名时非常方便。
你呢?你以前用过重命名命令吗?你喜欢如何一次重命名多个文件?