如何在Linux中重命名文件

你是第一次使用 Linux 操作系统吗?如果是的话,重命名文件和文件夹等常见任务可能与你所熟悉的方式有所不同。但不要担心。在 Linux 中重命名文件的概念与其他操作系统中的方式类似。

在本教程中,你将学习在 Linux 中重命名单个和多个文件的许多方法,包括通过图形用户界面和在终端中运行命令。

让我们开始吧!

先决条件

要跟随本教程操作,请确保你具备以下条件:

使用文件管理器在 Linux 中重命名文件

如果你习惯通过图形用户界面管理文件,请从文件管理器开始本教程以重命名文件。GUI 文件管理器非常方便,因为你可以直接看到文件。Linux 中提供的其中一个文件管理器是 GNOME 的前文件管理器 Nautilus。本教程演示了使用 Nautilus 文件管理器重命名文件的过程。

Linux的其他文件管理器包括KonquerorDolphinKrusaderThunarNemo文件管理器和Sunflower 文件管理器。这些文件管理器执行相同的任务,但重命名文件或目录的方式可能略有不同。

启动终端,然后运行以下命令来安装Nautilus (install nautilus),如果您的计算机上还没有该文件管理器,可以使用apt软件包管理器。使用sudo命令可以提升命令的权限为sudo/管理员权限。

sudo apt install nautilus

重命名单个文件

在Nautilus中重命名单个文件只需几次点击,就像在Windows文件资源管理器中一样。

要重命名单个文件,请打开Nautilus,右键单击要重命名的文件,然后选择重命名,如下所示。

此示例侧重于重命名文件,但重命名文件和目录的过程相同。

Renaming a Single File

现在键入新文件名以替换原文件名,然后按Enter或点击重命名,就完成了。

Entering New File Name

使用Nautilus文件管理器重命名多个文件

与Windows类似,Ubuntu为您提供了多种选项,让您一次重命名多个文件。

要重命名多个文件,请选择要重命名的所有文件,右键单击其中任何一个,然后选择重命名。将出现一个弹出窗口,您可以在其中选择要如何重命名所选文件。

Renaming Multiple Files Using Nautilus.

下面,有两个选项可供选择,具体取决于您想要如何重命名所选文件。

  • 使用模板重命名 – 这允许您逐渐重命名文件。
  • 查找和替换文本 – 允许您在文件名中查找和替换某些文本。

使用模板重命名文件

要使用模板重命名文件,请选择使用模板重命名选项。

现在在空字段中输入替换名称以使用模板重命名文件,并单击+添加按钮,然后从模板中选择。对于此教程,请选择第一个(1,2,3,4),然后单击重命名。此选项在替换文件名后为每个文件添加递增编号(Text1、Text2,…)。

Renaming Files using a Template

请注意文件名已更改为文本,后跟递增数字。

Verifying File Names Changed to “Text” with Incrementing Num

查找和替换文件名中的单词

要使用特定文件名重命名多个文件,请选择查找和替换文本选项。

现有文本字段中输入文本,在替换为字段中输入替换文本,然后单击重命名以替换文本。此选项可在文件名中查找并替换特定文本。

Replacing Texts in File Names

现在,您可以看到已将每个文件名中的单词“文本”替换为“文件”。

Verifying the word “Text” was replaced with the word “File” on Each File

使用mv命令重命名文件

如果您更喜欢运行命令而不是在 GUI 中导航,请准备好学习如何在终端中重命名文件。在 Linux 终端中重命名文件与在其他命令行环境(如 PowerShell)中执行操作类似。您运行命令以使用目标文件名重命名原始文件名,就是这样。

重命名文件有两种情况。第一种是从工作目录重命名文件,第二种是通过指定完整路径。查看下面的mv命令语法,以重命名文件,其中source是原始名称,destination是替换名称。

# 在工作目录中重命名文件或目录
mv <source> <destination>
# 通过指定完整路径重命名文件
mv <~/mydir/source> <~/mydir/destination>

使用mv命令重命名单个文件

在 mv 命令语法仍然清晰的时候,让我们尝试重命名单个文件。

为了演示如何重命名单个文件和目录:

1. 启动你的终端,然后运行下面的一系列命令来创建一个目录和两个文本文件。

# 创建一个名为 'test' 的目录
mkdir test 
# 切换到 ~/test 目录
cd test 
# 创建名为 'file1.txt' 和 'file2.txt' 的文本文件
touch file1.txt file2.txt 

2. 接下来,运行 ls 命令来列出工作目录中的文件。下面,你可以看到 file1.txtfile2.txt 存在于 ~/test 目录中。

Listing Files in the Working Directory

3. 运行以下任一 mv 命令来将 file1.txt 重命名为 file10.txt

# 在工作目录中重命名一个文件
mv file1.txt file10.txt

# 通过指定完整路径来重命名一个文件
mv ~/test/file1.txt ~/test/file10.txt

重命名目录与重命名文件相同,如下所示:mv ~/test ~/demo。符号 ~ 表示主目录。

4. 最后,重新运行 ls 命令来列出工作目录中的文件。

下面,你可以看到 file1.txt 现在被重命名为 file10.txt

Confirming file1.txt is renamed as file10.txt

使用 For 循环重命名多个文件

如果您因其他任务繁忙并希望一次性重命名所有文件,您需要使用像下面这样的for循环语句。

将以下代码复制粘贴到终端中,然后按Enter键。下面的代码扫描工作目录中的每个文本文件,并使用“File”后跟递增的数字对文件进行重命名。

#声明变量,其值设置为1
i=1 
#扫描工作目录中的每个文本文件
for file in *.txt; 
#迭代以下命令,直到扫描所有文件
do 
  #使用"File"后跟递增的数字($i)对每个文件进行重命名
	mv -- "$file" "File$i.txt"
  #将变量当前数字值增加1
  i=$((i+1)) 
done

将代码粘贴到终端中可以正常工作,但作为良好的实践,最好创建一个脚本 文件来运行。

下面,您可以看到代码如何重命名所有文件的操作。

Renaming Files with a For Loop

使用rename实用程序在Linux中重命名文件

如果您在日常工作中需要重命名单个文件,那么mv命令就足够了。但也许您希望一次性重命名多个具有相同模式的文件?例如,重命名以某个特定词(file)开头的文件。在这种情况下,请安装rename实用工具。

rename实用工具可以批量重命名多个文件,更改文件名格式并覆盖文件。

要安装rename实用程序,请根据您正在使用的Linux发行版运行以下任何一个命令。

# 使用apt软件包管理器为Ubuntu、Debian和Linux Mint安装rename实用程序
sudo apt install rename
# 使用dnf软件包管理器为CentOS、Fedora和Red Hat安装rename实用程序
sudo dnf install prename
# 使用pacman软件包管理器为Arch Linux / Manjaro Linux安装rename实用程序
sudo pacman -S perl-rename

您可以在下面看到rename命令的语法。

rename <options> <perlexpr> <files>

重命名多个文件

有了rename命令的语法,现在您可以重命名具有相同模式的文件了。rename命令的好处在于,您无需像在“使用For循环重命名多个文件”部分中那样声明循环函数来重命名多个文件。

也许您想使用特定的单词重命名文件。如果是这样,请查看以下示例命令中的Perl正则表达式's/file/myfile/')。Perl正则表达式基于Perl编程语言定义字符串模式。

为了避免错误地重命名其他文件,请在通过添加-n选项列出所有受影响的文件之前进行重命名,如下所示。

rename -n 's/file/myfile/' *.txt
Listing Affected Files Before Renaming

现在运行以下任一rename命令,以替换工作目录或~/test/*.txt目录中每个文本文件名称中的file单词为myfile

在Perl表达式('s/file/myfile/')中,s表示替换,这意味着您正在重命名文件。注意添加了-v选项以返回命令重命名的文件。

# 在工作目录中将 'file' 替换为 'myfile' 
rename -v 's/file/myfile/' *.txt
# 在 ~/test 目录中将 'file' 替换为 'myfile' 
rename -v 's/file/myfile/' ~/test/*.txt

如下所示,您可以看到文本文件中的每个“file”单词都已重命名为“myfile”。

Renaming a Files with the rename Command

如果您更喜欢重新命名所有文件,而不是仅更改文件扩展名,请在指定文件路径时删除文件扩展名,例如,rename -v 's/file/myfile/' ~/test/*

更改文件扩展名

除了文件名外,rename命令还可更改文件扩展名。也许您已经创建了带有错误文件扩展名的文件。在这种情况下,您将在运行rename命令时指定要更改的文件扩展名的Perl表达式。

运行下面的rename命令,将~/test目录中所有文件(*)的扩展名从.txt更改为.html。Perl表达式中的$符号匹配字符串(.txt)的末尾,因此该命令仅更改.txt文件扩展名。就像重新命名多个文件一样,添加-v选项以列出命令所做的每个更改。

rename -v 's/.txt$/.html/' *.txt

要删除所有文件扩展名,而不是替换字符串,请执行以下操作:rename -v 's/.txt$//' *.txt

如下图所示,.txt扩展名已更改为.html

Changing File Extensions from .txt to .html

将文件名更改为大写和小写

除了不正确的文件扩展名外,您可能正在处理以小写或大写形式命名的文件。也许您试图以大写形式查找文件,而不知道文件名以小写形式存在。

Linux是区分大小写的,所以让我们确保每个文件名的大小写都正确。大小写基本上是区分小写和大写字母之间的文本差异。

运行以下任一rename命令,将工作目录(*)中所有小写(a-z)文件名更改为大写(A-Z),反之亦然。

# 将文件名从小写更改为大写
rename -v 'y/a-z/A-Z/' *
# 将文件名从大写更改为小写
rename -v 'y/A-Z/a-z/' *

您可以在下面看到更改文件名大小写的两个结果。

Changing File Name from Lowercase to Uppercase and Vice Versa

替换和删除文件名中的空格

就像文件名的大小写一样,如果文件名中有空格,您可能会有问题找到文件。让我们通过用字符替换空格或完全删除空格来解决这个问题。

运行以下rename命令,将工作目录中所有文件名中的空格替换为下划线(_)。由于下划线是一个元字符,请用反斜杠(\\_)转义它,以明确声明下划线的字面意义。元字符是计算机程序中具有特殊含义的特殊字符。

注意Perl表达式中的g告诉命令替换所有匹配项(空格),而不仅仅是第一个。

rename -v 's/ /\\_/g' *

下面,您可以看到该命令将所有空格替换为下划线。

Replacing spaces with underscores in a file name

要删除文件名中的所有空格,而不是用字符填充它们,请运行以下命令。

下面的Perl表达式中,空格后面的星号(/ *)匹配文件名中的所有空格的所有出现,而不仅仅是第一个。替换字符为空(//),因此rename命令会移除所有(g)空格。

rename -v "s/ *//g" *

现在您可以看到每个文件名中的所有空格都已删除。

Removing all spaces in filenames

将文件名中每个单词的首字母大写

如果您希望保留空格并将文件名中每个单词的首字母大写,您将需要一个更复杂的Perl表达式。请查看下面的示例命令。

下面的Perl表达式匹配单词边界(\\b)中的任何单个字符(\\w),只要该字符不是句号或撇号(?<![.'\\''])。然后,rename命令将该字母转换为大写(u$&)。

rename -v 's/(?<![.'\\''])\\b\\w*/\\u$&/g' *

下面,您可以看到文件名中的每个单词都以大写字母开头,同时保留文件扩展名不变。

Capitalizing First Letter of Each Word in File Names

结论

在本教程中,您已经学会了通过图形用户界面和命令行终端重命名 Linux 文件的多种方法。现在您已经对如何一次性操作单个和多个文件的名称有了扎实的了解。

为什么不学习 Linux Shell 脚本,并创建一个脚本来自动重命名 Linux 中的文件呢?

Source:
https://adamtheautomator.com/rename-files-in-linux/