如何在 Linux 上重命名目錄

已發表: 2022-06-16
顯示 bash 提示符的 Linux 筆記本電腦
fatmawati achmad zaenuri/Shutterstock.com

在 Linux 中重命名目錄很容易,並且有很多方法可以解決。 從重命名單個目錄到查找和重命名多個目錄,以下是操作方法。

您的數據是安全的

重命名目錄是我們不時需要做的事情。

我們可能會創建一個目錄並拼錯它的名稱,我們想把它改正。 通常,目錄的​​用途會隨著時間或項目的生命週期而變化,您希望調整名稱以反映其新用途。 也許您已經解壓縮了一個存檔文件,它創建了一個目錄樹,目錄名稱為大寫,您希望它們為小寫。

什麼是計算機文件和文件夾?
相關什麼是計算機文件和文件夾?

不管是什麼原因。 重命名目錄不會對其中保存的數據做任何事情。 它會更改該數據的路徑,但不會觸及重命名目錄中的文件和目錄。

不要重命名系統目錄。 至少可以說,更改系統文件和命令的路徑將對計算機的運行產生不利影響。 如果你需要使用sudo重命名一個目錄——除非你真的知道你在做什麼——你很可能不應該重命名它。

使用 mv 命令

在最簡單的情況下,我們真正需要的只是mv命令。 這是每個 Linux 發行版不可或缺的一部分,因此無需安裝。

廣告

mv命令在撰寫本文時已有 50 多年的歷史。 它源於 Unix 的黎明,當時短而神秘的命令正在流行,可能是為了減少必須通過慢速串行線路從電傳打字機和啞終端傳輸到實際計算機的字符數量。

它實際上代表“移動”,它可以用來將文件從一個目錄移動到另一個目錄。 如果您將文件移動到它已經存在的相同位置並給它一個新名稱,則您已重命名該文件。 我們可以對目錄做同樣的事情。

此目錄中有兩個子目錄。

 ls 

列出兩個子目錄

要重命名目錄,我們使用 mv 命令。 我們需要提供目錄的當前名稱和新名稱。

 mv old-work archive-2 

使用 mv 重命名目錄

如果要重命名的目錄不在當前目錄中,請提供路徑以及目錄名稱。

 mv ~/htg/old-work ~/htg/archive-2
 ls 

通過在命令行上指定路徑,使用 mv 重命名不同目錄中的目錄

使用文件瀏覽器

文件瀏覽器能夠重命名目錄。 GNOME Files 應用程序中的按鍵是 F2。 突出顯示目錄並點擊 F2 鍵打開“重命名文件夾”對話框。

使用fie瀏覽器重命名目錄

廣告

輸入新名稱,然後單擊綠色的“重命名”按鈕。

在文件瀏覽器中提供新目錄名稱

該目錄已為您重命名。

文件瀏覽器窗口中重命名的目錄

就這麼簡單。

重命名命令

如果您的需求比直接重命名目錄更複雜,您可能需要使用rename命令。 這允許您使用 Perl 表達式來重命名文件和目錄。 它提供了一種更強大、更靈活的方式來重命名目錄。

我們將討論基於 Perl 的rename命令。 還有另一個較舊的命令稱為rename ,它是 Linux 核心實用程序的一部分。 您可能需要安裝我們要使用的 Perl rename命令。

為了避免名稱與現有的rename命令衝突,Perl rename命令在 Fedora 上稱為prename ,在 Manjaro 上稱為perl-rename 。 在 Ubuntu 上, renameprename命令都是符號鏈接,可解析為名為file-rename的二進製文件。

因此,在 Manjaro 上,您需要使用perl-rename命令,而在 Fedora 上,它是prename 。 在 Ubuntu 上,您可以使用renameprename

要安裝 Perl 重命名,在 Ubuntu 上你需要輸入:

 sudo apt install 重命名

在 Ubuntu 上安裝重命名

在 Fedora 上,命令是:

 sudo dnf 安裝前綴

在 Fedora 上安裝 prename

在 Manjaro 上,這個包被稱為perl-rename

 sudo pacman -Sy perl-rename 

在 Manjaro 上安裝 perl-rename

廣告

如果您想完成這些示例,請確保為您的發行版使用適當的命令。

重命名的第一步

rename命令採用 Perl 正則表達式並將它們應用於文件或目錄,或文件或目錄組。

在我們的目錄中,我們有其他目錄的集合。

 ls 

大寫、小寫和大小寫混合的目錄集合

它們的名稱是小寫、大寫和混合大小寫的混合。 我們可以使用合適的表達式將它們全部轉換為小寫。

 重命名 'y/AZ/az/' *
 ls 

將目錄轉換為小寫名稱

所有目錄現在都是小寫的,無論它們以前是完全大寫的,還是包含奇怪的大寫字母。

所有的魔法都包含在表達式中。 表達式用單引號“ ' ”括起來。 這就是整個命令的意思。

  • y :這意味著搜索第一個字符範圍中的任何字符,並將其替換為第二個字符範圍中的相應字符。
  • /AZ/az/ :第一個範圍是從“A”到“Z”的所有字母,第二個範圍是從“a”到“z”的所有字符。
  • * :星號通配符表示將其應用於所有目錄。
廣告

換句話說,該命令讀作“對於所有目錄,將任何大寫字母交換為等效的小寫字母”。

顯然,您可以使用rename重命名單個目錄,儘管它確實有點矯枉過正。 使用mv會更快。

 重命名 's/gamma/epsilon-2/' *
 ls 

使用 rename 重命名單個目錄

此表達式中的“s”表示替代。 它檢查每個目錄以查看其名稱是否為“gamma”。 如果是,則將其替換為“epsilon-2”。 但請注意,這也會匹配一個名為“gamma-zeta”的目錄,例如,將其重命名為“epsilon-2-zeta”。

我們可以通過在表達式的第一個子句中添加字符串“ ^ ”的開頭和字符串“ $ ”的結尾元字符來避免這種情況。

 ls
 重命名 's/^gamma$/epsilon-2/' *
 ls 

將重命名操作僅限於整個目錄名稱

這使目錄“epsilon-2”保持不變。

將重命名與其他命令一起使用

我們可以使用其他命令來定位我們想要rename的目錄。 如果我們有一組嵌套目錄,並且我們想要重命名以“-old”結尾的任何目錄,以便它們以“-archive”結尾,我們可以通過使用findxargs來實現。

如何在 Linux 上使用 xargs 命令
相關如何在 Linux 上使用 xargs 命令

我們需要使用xargs因為rename不接受管道輸入。 xargs命令通過接受管道輸入並作為命令行參數添加到另一個命令的命令行來克服該問題。

我們的命令如下所示:

 尋找 。 -depth -type d -name "*-old" | xargs -r 重命名“s/old$/archive/”
  • . : 我們告訴 find 在當前目錄中開始搜索。 當然,這可以是任何路徑。
  • -depth :使用深度優先搜索。 這意味著更深的嵌套子目錄的內容在更高的子目錄之前被處理。
  • -type d :搜索目錄,而不是文件。
  • -name “*-old” :搜索線索。 我們正在尋找名稱以“-old”結尾的目錄。
  • | :我們將 find 的輸出通過管道傳輸到xargs命令中。
  • xargs -r-r (如果為空則不運行)表示如果沒有匹配的目錄則不運行命令。
  • rename “s/old$/archive/” :要運行的rename命令。

我們的目錄樹在命令之前看起來像這樣。

我們重命名命令之前的目錄樹

我們運行我們的命令:

我們使用 find、xargs 和 rename 的重命名命令

廣告

我們可以看到所有匹配的目錄,包括嵌套目錄都已重命名。

重命名命令後的目錄樹

課程用馬

重命名目錄只需要mv 。 如果您更喜歡 GUI 應用程序,您可以使用文件瀏覽器。 如果你有很多目錄要重命名,特別是如果它們分散在整個目錄樹中,你將需要rename的靈活性。

相關:如何從 Linux 終端管理文件:您需要知道的 11 個命令