如何在 Linux 中重命名目錄
在 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 實用程序的一部分。您可能需要安裝rename
我們要使用的 Perl 命令。
為了避免與現有命令的命名衝突,在 Fedora 和Manjaro中調用rename
Perl 命令。在 Ubuntu 中,命令和都是符號鏈接,可解析為名為.rename
prename
perl-rename
rename
prename
file-rename
所以,在 Manjaro 中你需要使用命令perl-rename
,而在 Fedora 中你需要使用prename
. 在 Ubuntu 上,您可以使用rename
任一prename
.
要安裝 Perl 重命名,在 Ubuntu 上你需要輸入:
sudo apt install rename
在 Fedora 中,命令是:
sudo dnf install prename
在 Manjaro 上,該包稱為perl-rename
.
sudo pacman -Sy perl-rename
如果您想完成這些示例,請確保為您的發行版使用適當的命令。
重命名的第一步
該命令rename
採用 Perl 正則表達式並將它們應用於文件或目錄,或一組文件或目錄。
我們的目錄有一系列其他目錄。
ls
它們的名稱是小寫、大寫和混合大小寫的混合。我們可以使用合適的表達式將它們全部轉換為小寫。
rename 'y/A-Z/a-z/' *
ls
所有目錄現在都是小寫的,無論它們之前是完全大寫還是包含一個奇怪的大寫字母。
所有的魔法都在表達中。表達式用單引號“ '
”括起來。這就是整個團隊的意思。
- y:這意味著搜索第一個字符範圍內的任何字符,並將其替換為第二個字符範圍內的相應字符。
- /AZ/az/:第一個範圍是從“A”到“Z”的所有字母,第二個範圍是從“a”到“z”的所有字符。
- *:星號通配符表示這適用於所有目錄。
換句話說,該命令讀取“對於所有目錄,將所有大寫字母替換為其等效的小寫字母”。
顯然,您可以使用 重命名單個目錄rename
,儘管這看起來是多餘的。您將更快地使用mv
.
rename 's/gamma/epsilon-2/' *
ls
此表達式中的“S”代表替換。它檢查每個目錄以查看其名稱是否為“gamma”。如果是這樣,它將用“epsilon-2”替換它。但是請注意,這也將匹配名為“gamma-zeta”的目錄,例如,將其重命名為“epsilon-2-zeta”。
這可以通過將行首“ ^
”和行尾“ $
”元字符添加到表達式的第一個子句來避免。
ls
rename 's/^gamma$/epsilon-2/' *
ls
這使“epsilon-2”目錄保持不變。
將重命名與其他命令一起使用
我們可以使用其他命令來查找我們想要rename
處理的目錄。如果我們有一組嵌套目錄,並且想要將所有以“-old”結尾的目錄重命名為以“-archive”結尾,我們可以使用find
and來實現xargs
。
我們需要使用xargs
,因為rename
它不接受管道輸入。該命令xargs
通過採用管道輸入並將另一個命令添加到命令行作為命令行參數來克服這個問題。
我們的團隊是這樣的:
find. -depth -type d -name "*-old"| xargs -r rename "s/old$/archive/"
- .: 我們告訴 find 在當前目錄中開始搜索。當然,它可以是任何一種方式。
- -depth:使用深度優先搜索。這意味著更深的嵌套子目錄的內容在更高的子目錄之前被處理。
- -type d:查找目錄,而不是文件。
- -name “*-old”:搜索提示。我們正在尋找名稱以“-old”結尾的目錄。
- |:我們將 find 命令的輸出通過管道傳輸到
xargs
命令中。 - xargs -r:(
-r
如果為空則不運行)表示如果沒有合適的目錄則不運行該命令。 - 重命名“s/old$/archive/”:
rename
要運行的命令。
我們的目錄樹在命令之前看起來像這樣。
讓我們運行我們的命令:
我們可以看到所有相關的目錄,包括子目錄,都被重命名了。
除了 . 你不需要任何東西mv
。如果您更喜歡 GUI 應用程序,可以使用文件瀏覽器。如果您需要重命名大量目錄,特別是如果它們分散在整個目錄樹中,您將需要靈活性rename
。
發佈留言