如何在 Linux 中重命名文件

你對 Linux 作業系統還不熟悉嗎?如果是的話,像重新命名檔案和資料夾這樣的常見任務可能與你所熟悉的不同。但不用擔心。在 Linux 中重新命名檔案的概念與其他作業系統中的方式相似。

在這個教程中,你將學習在 Linux 中重新命名單個和多個檔案的多種方法,包括通過 GUI 和在終端中運行命令。

讓我們開始吧!

先備條件

在本教程中跟隨操作,請確保你具備以下條件:

使用檔案管理器在 Linux 中重新命名檔案

如果你習慣通過 GUI 管理檔案,讓我們從使用檔案管理器重新命名檔案開始這個教程。GUI 檔案管理器很方便,因為你可以清楚地看到檔案。Linux 中提供的其中一個檔案管理器是 GNOME 的前身檔案管理器 Nautilus。本教程演示了使用 Nautilus 檔案管理器重新命名檔案的方法。

Linux的其他檔案管理器包括KonquerorDolphinKrusaderThunarNemo檔案管理器和Sunflower檔案管理器。這些檔案管理器執行相同的任務,但重新命名檔案或目錄可能稍有不同。

啟動您的終端,然後執行以下命令以使用apt套件管理器安裝Nautilus(install nautilus),如果您的機器上尚未安裝它。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

注意到文件名已更改為Text,後跟遞增的數字。

Verifying File Names Changed to “Text” with Incrementing Num

在文件名中查找並替換單詞

要使用特定文件名重命名多個文件,請選擇查找並替換文本選項。

現有文本字段中輸入文本,並在替換為字段中輸入替換文本,然後點擊重命名以替換文本。此選項查找並替換文件名中的特定文本。

Replacing Texts in File Names

現在,您可以看到您已將每個文件名中的單詞“Text”更改為“File”

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命令重命名單個文件

當您的心中仍然記憶猶新時,讓我們試著重新命名一個單一檔案。

為了示範如何重新命名單一檔案和目錄:

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命令,将每个文本文件名中的单词file替换为myfile,位于工作目录或~/test/*.txt目录内。

在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

如果要删除所有文件扩展名,请在Perl表达式中删除替换字符串,如: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 表达式匹配单词边界中的任何单个字符 (\\w),只要该字符不是句点或撇号 (?<![.'\\''])。然后,rename 命令将该字母转换为大写(u$&)。

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

如下所示,文件名中的每个单词都以大写字母开头,同时保留文件扩展名不变。

Capitalizing First Letter of Each Word in File Names

结论

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

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

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