在Linux中一次重命名多个文件的6种方法

时间:2020-03-21 11:44:50  来源:igfitidea点击:

我们可能已经知道,我们使用mv命令在类似Unix的操作系统中重命名或者移动文件和目录。
但是,mv命令将不支持一次重命名多个文件。
一次只能重命名一个文件。
不用担心几乎没有其他实用程序可用,尤其是用于批处理重命名文件的实用程序。
在本教程中,我们将学习使用六种不同的方法一次重命名多个文件。
此处提供的所有示例均已在Ubuntu 18.04 LTS中进行了测试,但是它们应可在任何Linux操作系统上运行。
让我们开始吧!

在Linux中一次重命名多个文件

重命名文件堆可能有许多命令和实用程序。
在撰写本文时,我仅了解以下方法。
如果将来遇到任何方法,我将继续更新列表。

方法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将无法理解它们。

“至”模式中的“#1”是通配符索引。
它与“发件人”模式中找到的第一个通配符匹配。
“至”模式中的“#2”将与第二个通配符匹配,依此类推。
在我们的示例中,我们只有一个通配符(星号),因此我们编写一个#1.
并且,井号也应转义。
另外,我们也可以将模式用引号引起来。

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

$mmv \*.txt \#1.doc

这是另一个例子。
假设我们有以下文件。

$ls
abcd1.txt abcd2.txt abcd3.txt

我们想用xyz替换当前目录中所有文件中第一个出现的abc。
你会怎么做?

简单的。

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

请注意,在上面的示例中,我将模式用单引号引起来。

让我们检查“ abc”是否实际被“ xyz”替换。

$ls
xyzd1.txt xyzd2.txt xyzd3.txt

看到了吗?
文件abcd1.txt,abcd2.txt和abcd3.txt已重命名为xyzd1.txt,xyzd2.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-使用重命名实用程序

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

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

$sudo apt install rename

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

$ls
abcd1.txt abcd2.txt abcd3.txt

让我们在任何发现的地方都用xyz替换第一次出现的abc。
为此,请运行:

$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

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

  • qmv(快速移动),
  • qcp(快速复制),
  • imv(互动移动),
  • icp(交互式副本),
  • deurlname(删除URL)。

安装renameutils

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

$sudo pacman -Syu renameutils

在基于Debian的系统上:

$sudo apt install renameutils

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

  1. QMV

qmv程序将在默认文本编辑器中打开目录中的文件名,并允许我们对其进行编辑。

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

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

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

$qmv theitroad/

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

或者,我们可以cd进入目录并仅运行'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 theitroad/
xyzd1.txt xyzd2.txt xyzd3.txt

看到了吗?
所有文件都被重命名。
重命名工具不仅会重命名文件,还会重命名目录名称。

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

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

$qmv -f do theitroad/

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

现在,我们将仅看到目标列。
那是我们进行更改的列。

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

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

$man qmv
  1. qcp

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

$qcp theitroad/

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

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

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

$man qcp
  1. imv

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

$imv theitroad/abcd1.txt

根据需要编辑文件名,然后按ENTER重命名。

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

$man imv
  1. icp

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

例子:

$icp theitroad/abcd1.txt

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

$man icp

我不知道为什么开发人员添加了这两个实用程序,而我们可以使用mv和cp命令执行相同的操作。

  1. deurlname

deurlname程序从文件名中删除URL编码的字符(例如代表空格的%20)。
某些程序,例如w3m,倾向于将那些字符编码在保存的文件中。
我们可以使用此工具清理从Internet下载的文件名。

看看下面的文件。

$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 clone仓库:

$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保存并退出。

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

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

方法5-使用Emacs

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

1.打开Emacs编辑器。

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

dired

3.输入包含要重命名的文件的目录路径(例如/home/sk/theitroad),然后按ENTER键。

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

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

观看演示视频:

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

方法6-使用Thunar文件管理器

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

大多数Linux发行版的默认存储库中都提供Thunar。

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

$sudo pacman -S thunar

在RHEL上,CentOS:

$sudo yum install thunar

在Fedora上:

$sudo dnf install thunar

在openSUSE上:

$sudo zypper install thunar

在Debian,Ubuntu和Linux Mint上:

$sudo apt-get install thunar

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

$thunar -B

这就是批量重命名的样子。

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

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

当从选择列表中选择这些条件之一时,我们将在“新名称”列中看到所做更改的预览,如下面的屏幕快照所示。

选择条件后,单击“重命名文件”选项以重命名文件。

我们也可以通过选择两个或者多个文件从Thunar中打开批量重命名器。
选择文件后,按F2或者右键单击并选择“重命名”。