如何在 Linux 上重命名目錄
已發表: 2022-06-16在 Linux 中重命名目錄很容易,並且有很多方法可以解決。 從重命名單個目錄到查找和重命名多個目錄,以下是操作方法。
您的數據是安全的
重命名目錄是我們不時需要做的事情。
我們可能會創建一個目錄並拼錯它的名稱,我們想把它改正。 通常,目錄的用途會隨著時間或項目的生命週期而變化,您希望調整名稱以反映其新用途。 也許您已經解壓縮了一個存檔文件,它創建了一個目錄樹,目錄名稱為大寫,您希望它們為小寫。
不管是什麼原因。 重命名目錄不會對其中保存的數據做任何事情。 它會更改該數據的路徑,但不會觸及重命名目錄中的文件和目錄。
不要重命名系統目錄。 至少可以說,更改系統文件和命令的路徑將對計算機的運行產生不利影響。 如果你需要使用sudo
重命名一個目錄——除非你真的知道你在做什麼——你很可能不應該重命名它。
使用 mv 命令
在最簡單的情況下,我們真正需要的只是mv
命令。 這是每個 Linux 發行版不可或缺的一部分,因此無需安裝。
mv
命令在撰寫本文時已有 50 多年的歷史。 它源於 Unix 的黎明,當時短而神秘的命令正在流行,可能是為了減少必須通過慢速串行線路從電傳打字機和啞終端傳輸到實際計算機的字符數量。
它實際上代表“移動”,它可以用來將文件從一個目錄移動到另一個目錄。 如果您將文件移動到它已經存在的相同位置並給它一個新名稱,則您已重命名該文件。 我們可以對目錄做同樣的事情。
此目錄中有兩個子目錄。
ls
要重命名目錄,我們使用 mv 命令。 我們需要提供目錄的當前名稱和新名稱。
mv old-work archive-2
如果要重命名的目錄不在當前目錄中,請提供路徑以及目錄名稱。
mv ~/htg/old-work ~/htg/archive-2
ls
使用文件瀏覽器
文件瀏覽器能夠重命名目錄。 GNOME Files 應用程序中的按鍵是 F2。 突出顯示目錄並點擊 F2 鍵打開“重命名文件夾”對話框。
輸入新名稱,然後單擊綠色的“重命名”按鈕。
該目錄已為您重命名。
就這麼簡單。
重命名命令
如果您的需求比直接重命名目錄更複雜,您可能需要使用rename
命令。 這允許您使用 Perl 表達式來重命名文件和目錄。 它提供了一種更強大、更靈活的方式來重命名目錄。
我們將討論基於 Perl 的rename
命令。 還有另一個較舊的命令稱為rename
,它是 Linux 核心實用程序的一部分。 您可能需要安裝我們要使用的 Perl rename
命令。
為了避免名稱與現有的rename
命令衝突,Perl rename
命令在 Fedora 上稱為prename
,在 Manjaro 上稱為perl-rename
。 在 Ubuntu 上, rename
和prename
命令都是符號鏈接,可解析為名為file-rename
的二進製文件。
因此,在 Manjaro 上,您需要使用perl-rename
命令,而在 Fedora 上,它是prename
。 在 Ubuntu 上,您可以使用rename
或prename
。
要安裝 Perl 重命名,在 Ubuntu 上你需要輸入:
sudo apt install 重命名
在 Fedora 上,命令是:
sudo dnf 安裝前綴
在 Manjaro 上,這個包被稱為perl-rename
。
sudo pacman -Sy perl-rename
如果您想完成這些示例,請確保為您的發行版使用適當的命令。
重命名的第一步
rename
命令採用 Perl 正則表達式並將它們應用於文件或目錄,或文件或目錄組。
在我們的目錄中,我們有其他目錄的集合。
ls
它們的名稱是小寫、大寫和混合大小寫的混合。 我們可以使用合適的表達式將它們全部轉換為小寫。
重命名 'y/AZ/az/' *
ls
所有目錄現在都是小寫的,無論它們以前是完全大寫的,還是包含奇怪的大寫字母。
所有的魔法都包含在表達式中。 表達式用單引號“ '
”括起來。 這就是整個命令的意思。
- y :這意味著搜索第一個字符範圍中的任何字符,並將其替換為第二個字符範圍中的相應字符。
- /AZ/az/ :第一個範圍是從“A”到“Z”的所有字母,第二個範圍是從“a”到“z”的所有字符。
- * :星號通配符表示將其應用於所有目錄。
換句話說,該命令讀作“對於所有目錄,將任何大寫字母交換為等效的小寫字母”。
顯然,您可以使用rename
重命名單個目錄,儘管它確實有點矯枉過正。 使用mv
會更快。
重命名 's/gamma/epsilon-2/' *
ls
此表達式中的“s”表示替代。 它檢查每個目錄以查看其名稱是否為“gamma”。 如果是,則將其替換為“epsilon-2”。 但請注意,這也會匹配一個名為“gamma-zeta”的目錄,例如,將其重命名為“epsilon-2-zeta”。
我們可以通過在表達式的第一個子句中添加字符串“ ^
”的開頭和字符串“ $
”的結尾元字符來避免這種情況。
ls
重命名 's/^gamma$/epsilon-2/' *
ls
這使目錄“epsilon-2”保持不變。
將重命名與其他命令一起使用
我們可以使用其他命令來定位我們想要rename
的目錄。 如果我們有一組嵌套目錄,並且我們想要重命名以“-old”結尾的任何目錄,以便它們以“-archive”結尾,我們可以通過使用find
和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
命令。
我們的目錄樹在命令之前看起來像這樣。
我們運行我們的命令:
我們可以看到所有匹配的目錄,包括嵌套目錄都已重命名。
課程用馬
重命名目錄只需要mv
。 如果您更喜歡 GUI 應用程序,您可以使用文件瀏覽器。 如果你有很多目錄要重命名,特別是如果它們分散在整個目錄樹中,你將需要rename
的靈活性。
相關:如何從 Linux 終端管理文件:您需要知道的 11 個命令