Linux中批量命名文件名的6种方法

方法 1 – 使用 mmv

mmv 实用程序用于在类 Unix 操作系统中使用标准通配符批量移动、复制、追加和重命名文件。它在基于 Debian 的系统的默认存储库中可用。要将其安装在 Debian、Ubuntu、Linux Mint 上,请运行以下命令:

$ sudo apt-get install mmv

假设您当前目录中有以下文件。

$ ls
a1.txt a2.txt a3.txt

现在,您要将字母“a”开头的所有文件重命名为“b”。当然,您可以在几秒钟内手动执行此操作。但试想一下,如果您有数百个文件并想要重命名它们?这是一个非常耗时的过程。这是mmv命令提供帮助的地方。

要将所有以字母“a”开头的文件重命名为“b”,只需运行:

$ mmv a\* b\#1

让我们检查文件是否已重命名。

$ ls
b1.txt b2.txt b3.txt

如您所见,所有以字母“a”开头的文件(即a1.txt,a2.txt,a3.txt)都重命名为b1.txt,b2.txt,b3.txt。

解释

在上面的示例中,第一个参数 (a\*) 是 “from” 模式,第二个参数是 “to” 模式 ( b\#1 )。根据上面的示例,mmv将查找任何以字母“a”为首的文件名,并根据第二个参数(即“to”模式)重命名匹配的文件。我们使用通配符(如“*”、“?”和“[]”)来匹配一个或多个任意字符。请注意,您必须转义通配符,否则它们将被shell扩展并且mmv将无法理解它们。

“to”模式中的“#1”是通配符索引。它与在“from”模式中找到的第一个通配符匹配。“to”模式中的“#2”将与第二个通配符匹配,依此类推。在我们的示例中,我们只有一个通配符(星号),所以我们写一个 #1。而且,哈希符号也应该转义。此外,您也可以用引号将模式括起来。

您甚至可以将具有特定扩展名的所有文件重命名为其他扩展名。例如,要将所有.txt文件重命名为当前目录中.doc文件格式,只需运行:

$ mmv \*.txt \#1.doc

下面是另一个示例。假设您有以下文件。

$ ls
abcd1.txt abcd2.txt abcd3.txt

您希望在当前目录的所有文件中将第一次出现的 abc 替换为 xyz。你会怎么做?

简单。

$ mmv '*abc*' '#1xyz#2'

请注意,在上面的例子中,我用单引号括起了模式。

让我们检查一下“abc”是否真的被替换为“xyz”。

$ ls
xyzd1.txt xyzd2.txt xyzd3.txt

看?文件 abcd1.txtabcd2.txt 和 abcd3.txt已重命名为 xyzd1.txtxyzd2.txt 和 xyzd3.txt

mmv命令的另一个显着功能是您可以只打印输出,而不是使用-n选项重命名文件,如下所示。

$ mmv -n a\* b\#1 
a1.txt -> b1.txt
a2.txt -> b2.txt
a3.txt -> b3.txt

这样,您就可以在重命名文件之前简单地验证mmv命令实际执行的操作。

有关更多详细信息,请参阅手册页。

$ man mmv

方法 2 – 使用重命名实用程序

重命名实用程序将通过替换名称中第一次出现的表达式来重命名给定文件。

rename 命令预装在大多数类 Unix 操作系统中。如果它在默认情况下不可用,请运行以下命令将其安装在基于 Debian 的系统上:

$ sudo apt install rename

例如,我在当前目录中有以下文件。

$ ls
abcd1.txt abcd2.txt abcd3.txt

让我们将 abc 的第一次出现替换为 xyz,只要找到。为此,请运行:

$ rename 's/abc/xyz/' *

现在,验证是否已使用ls命令进行了更改。

$ ls
xyzd1.txt xyzd2.txt xyzd3.txt

有时,您可能只打印输出,而不是重命名文件。如果是这样,请使用 -n 标志显示将发生哪些重命名而不执行它们:

$ rename -n 's/abc/xyz/' *
rename(abcd1.txt, xyzd1.txt)
rename(abcd2.txt, xyzd2.txt)
rename(abcd3.txt, xyzd3.txt)

如您所见,上述命令没有进行任何更改,而只是显示将发生的重命名。

即使该操作会使用 -f 标志覆盖现有文件,也可以强制执行重命名任务,如下所示。

$ rename -f 's/abc/xyz/' *

如果您不想覆盖文件,只需将它们转换为大写或小写字母(反之亦然)即可防止“已经存在”错误。要将所有文件名转换为小写,请执行以下操作:

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

让我们检查是否已进行更改。

$ ls
ABCD1.TXT ABCD2.TXT ABCD3.TXT

是的,文件名中的字母已从小写更改为大写。

同样,要将文件名转换为小写,请运行:

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

我们也可以删除文件名中的所有空行。例如,我有以下文件。

$ ls
Clouds of Sunset.mp3

要删除上述文件名中的所有空格,请运行:

$ rename "s/ *//g" *

现在,文件名没有任何空格。

$ ls
CloudsofSunset.mp3

将空格替换为下划线:

$ rename 's/\s+/_/g' *

您可能希望更改文件扩展名,但不重命名文件名。这也是可能的。以下命令会将所有 *.txt 文件重命名为 *.doc。

$ rename 's/\.txt$/.doc/' *.txt

使用 ls 命令验证更改:

$ ls
abcd1.doc abcd2.doc abcd3.doc

若要删除.txt匹配的所有文件中的扩展名,请运行:

$ rename 's/\.txt$//' *.txt

有关更多详细信息,请参阅手册页。

$ man rename

方法 3 – 使用重命名实用程序

renameutils是一组程序,旨在更快,更轻松地批量重命名文件和目录。Renameutils由以下五个程序组成:

  1. qmv (快速移动),
  2. qcp (快速复制),
  3. imv (交互式移动),
  4. icp(交互式副本),
  5. deurlname (delete URL).

安装重命名实用程序

Renameutils在大多数Linux发行版的默认存储库中可用。要将其安装在基于 Arch 的系统上,请启用社区存储库并运行:

$ sudo pacman -Syu renameutils

在基于 Debian 的系统上:

$ sudo apt install renameutils

现在,让我们看一些例子。

1. 全要素

qmv程序将在默认文本编辑器中打开目录中的文件名,并允许您编辑它们。

我在一个名为“ostechnix”的目录中有以下三个文件。

$ ls ostechnix/
abcd1.txt abcd2.txt abcd3.txt

要重命名“ostechnix”目录中的文件名,只需执行以下操作:

$ qmv ostechnix/

现在,根据需要更改文件名。您将在编辑文件名时看到实时预览。

或者,您可以cd进入目录,然后简单地运行“qmv”。

打开文件后,您将看到两列,如以下屏幕截图所示。

Linux中批量命名文件名的6种方法

使用 qmv 批量重命名文件

左列显示源文件名,右列显示目标名称(编辑后将获得的输出文件名)。

现在,根据需要重命名右侧的所有输出名称。

Linux中批量命名文件名的6种方法

使用 qmv 批量重命名文件

重命名文件名后,保存并退出文件。

最后,您将看到以下输出:

Plan is valid.

abcd1.txt -> xyzd1.txt
abcd2.txt -> xyzd2.txt
abcd3.txt -> xyzd3.txt
   Regular rename

abcd1.txt -> xyzd1.txt
abcd2.txt -> xyzd2.txt
abcd3.txt -> xyzd3.txt

现在,检查是否确实使用“ls”命令进行了更改:

$ ls ostechnix/
xyzd1.txt xyzd2.txt xyzd3.txt

看?所有文件都将被重命名。不仅仅是文件,重命名实用程序还将重命名目录名称。

以下是qmv程序的快速视频演示:

Linux中批量命名文件名的6种方法

使用 qmv 批量重命名文件

如果不想编辑双列格式的文件名,请使用以下命令仅显示目标文件列。

$ qmv -f do ostechnix/

其中,“-f”表示格式“do”表示仅目标格式。

现在,您将只看到目标列。这是我们进行更改的列。

Linux中批量命名文件名的6种方法

完成后,保存并关闭文件。

有关更多详细信息,请参阅手册页。

$ man qmv

2. 断续器

qcp 程序的工作方式与 qmv 类似,但会复制文件而不是重命名它们。在这种情况下,您将获得同一文件的两个实例。这意味着它将保留原始文件和重复文件。

$ qcp ostechnix/

重命名右侧列出的文件名。保存并退出文件。最后,验证使用 ls 命令所做的更改:

$ ls ostechnix/
abcd1.txt abcd2.txt abcd3.txt xyzd1.txt xyzd2.txt xyzd3.txt

有关更多详细信息,请参阅手册页。

$ man qcp

3. imv

imv程序允许我们以交互方式重命名文件名。显然,它不适用于批量重命名。您只能逐个重命名文件。

$ imv ostechnix/abcd1.txt

根据需要编辑文件名,然后单击 Enter 将其重命名。

有关更多详细信息,请参阅手册页。

$ man imv

4. icp

icp 程序与 imv 相同,但它会复制文件而不是移动它们。

例:

$ icp ostechnix/abcd1.txt

有关更多用例和命令,请参阅手册页。

$ man icp

我不知道为什么开发人员添加了这两个实用程序,而我们可以使用mvcp命令做同样的事情。

5. deurlname

deurlname 程序从文件名中删除 URL 编码的字符(如表示空格的 %20)。某些程序(例如 w3m)倾向于将这些字符编码在保存的文件中。您可以使用此工具来清理从互联网上下载的文件名。

请看下面的文件。

$ ls
omg%20ponnu%20ily%20kannu.mp3

文件名中有一些特殊的字符和数字。如果清理它,只需运行:

$ deurlname omg%20ponnu%20ily%20kannu.mp3

现在,看看文件名是如何更改的。

$ ls
omg ponnu ily kannu.mp3

文件名干净且可读。

有关更多详细信息,请参阅手册页。

$ man deurlname

有关更多详细信息,请参阅本指南末尾提供的项目网站。

方法4 – 使用vimv

顾名思义,Vimv是一个命令行实用程序,可以使用Vim编辑器批量重命名文件。当然,您可以通过更改环境变量的值来更改$EDITOR编辑器。

要安装 Vimv,git 克隆存储库:

$ git clone https://github.com/thameera/vimv.git

将 vimv 二进制文件复制到$PATH,例如 /usr/local/bin/。

$ sudo cp vimv/vimv /usr/local/bin/

最后,使其可执行:

$ sudo chmod +x /usr/local/bin/vimv

现在转到目录并运行以下命令来编辑文件名。您将在Vi编辑器中看到文件名。按 i 切换到交互模式,并按照在 Vi 编辑器中编辑文本的方式编辑文件名。完成后,按ESC键并键入:wq保存并退出。

目录中的文件现在应该重命名。这是一个简短的视频演示。

Linux中批量命名文件名的6种方法

使用 Vimv 批量重命名文件

有关更多详细信息,请参阅本指南末尾给出的项目 GitHub 存储库。

方法5 – 使用Emacs

如果您安装了Emacs编辑器的系统,则可以按照以下步骤轻松进行批量重命名。

1. 打开您的 Emacs 编辑器。

2. 按 Alt+x 并键入以下内容,然后按 Enter 键切换到 wdired 模式(“可写目录编辑器模式”的缩写)。

dired

3. 输入目录的路径(例如 /home/sk/ostechnix),其中包含要重命名的文件并按 Enter 键。

然后,按 Ctrl+x 和 Ctrl+q 切换到读写模式。

 

5.现在,重命名文件。完成后,按 Ctrl+c 和 Ctrl+c(两次)以保存更改。若要中止更改,请按 Ctrl+c 和 Ctrl+k

观看演示视频:

Linux中批量命名文件名的6种方法

使用 Emacs 批量重命名文件

看?一次重命名多个文件非常简单。

方法6 – 使用图纳尔文件管理器

默认情况下,Thunar文件管理器具有内置的批量重命名选项。

Thunar 在大多数 Linux 发行版的默认存储库中可用。

要将其安装在基于 Arch 的系统上,请运行:

$ sudo pacman -S thunar

在 RHEL 上,CentOS:

$ sudo yum install thunar

在 Fedora 上:

$ sudo dnf install thunar

在 openSUSE 上:

$ sudo zypper install thunar

On Debian, Ubuntu, Linux Mint:

$ sudo apt-get install thunar

安装后,您可以从菜单或应用程序启动器中启动批量重命名实用程序。要从终端启动它,请使用以下命令:

$ thunar -B

这就是批量重命名的外观。

Linux中批量命名文件名的6种方法

单击加号,然后选择要重命名的文件列表。批量重命名可以重命名文件的名称、文件的后缀或文件的名称和后缀。Thunar 目前支持以下批量重命名器:

  • 插入日期或时间
  • 插入或覆盖
  • 编号
  • 删除字符
  • 搜索和替换
  • 大写/小写