終端基礎(chǔ):在 Linux 中重命名文件和目錄
如何在 Linux 終端中重命名文件和目錄?你可以使用 mv
命令。
是的,與用于將文件和文件夾從一個(gè)位置“移動(dòng)”到另一個(gè)位置的 mv
命令相同。
你可以在“移動(dòng)文件和目錄”時(shí)簡單地指定文件和目錄的新名稱。
要重命名文件,請(qǐng)使用:
mv old_file new_file
同樣,要重命名目錄,請(qǐng)使用:
mv old_dir new_dir
聽起來很容易,對(duì)吧? 但我將在這里詳細(xì)討論文件重命名:
- 向你展示重命名的實(shí)際示例
- 顯示通過結(jié)合
find
和exec
命令批量重命名多個(gè)文件的示例 - 討論用于批量重命名文件的專用程序
我們來一一看看。
使用 mv 命令重命名文件和目錄
使用 mv
命令重命名同一目錄中的文件:
mv file1.txt file2.txt
同樣,你可以重命名同一位置的目錄:
mv dir1 dir2
這是我重命名文件和目錄的示例:
如你所見,與 cp 命令 不同,你不必使用遞歸選項(xiàng)來通過 mv 命令 處理目錄。
?? 如果你嘗試使用相同的名稱重命名該文件,你會(huì)看到一個(gè)錯(cuò)誤(顯然)。
你還可以在將文件移動(dòng)到另一個(gè)位置時(shí)重命名它:
mv old-file-name another_dir/new-file-name
在下面的示例中,我將名為 firefox-quiz.txt
的文件移動(dòng)到示例目錄。在這樣做的同時(shí),我將其重命名為 quiz.txt
。
我將其視為剪切粘貼操作。
?? 雖然你可以將多個(gè)文件移動(dòng)到另一個(gè)位置(
mv file1 file2 file2 dir
),但你不能使用mv
重命名多個(gè)文件。為此,你必須采用我在以下部分中討論的其他策略。
通過組合 mv、find 和 exec 命令重命名與某個(gè)模式匹配的多個(gè)文件
?? 批量重命名此類文件時(shí)要格外小心。一步錯(cuò)誤的舉動(dòng)就會(huì)導(dǎo)致無法挽回的不良結(jié)果。
find
命令用于根據(jù)文件名、類型、修改時(shí)間和其他參數(shù)在給定目錄中查找文件。exec 命令與 find 結(jié)合使用,對(duì) find
命令的結(jié)果執(zhí)行命令。
使用 find
、exec
和 mv
命令沒有固定標(biāo)準(zhǔn)的結(jié)構(gòu)。你可以根據(jù)需要組合它們。
假設(shè)你想通過在名稱中添加 _old
來重命名當(dāng)前目錄中以 .txt
結(jié)尾的所有文件。所以 file_1.txt
變成 file_1.txt_old
等等。
find . -type f -name "*.txt" -exec mv {} {}_old ;
這只是一個(gè)示例,你的重命名要求可能會(huì)有所不同。另外,以上僅適用于不帶空格的文件名。
專業(yè)提示:在處理這樣的批量操作時(shí),你可以巧妙地使用 echo
命令來查看將執(zhí)行什么操作,而不是實(shí)際執(zhí)行它。如果看起來不錯(cuò),那就采取實(shí)際行動(dòng)吧。
例如,首先查看哪些文件將被重命名:
find . -type f -name "*.txt" -exec echo mv {} {}_old \;
如你所見,實(shí)際上沒有重命名任何文件。但是,如果你在沒有使用回顯(echo
)命令的情況下運(yùn)行上述命令,你將看到將執(zhí)行什么命令。
如果你覺得沒問題,請(qǐng)刪除 echo
命令并繼續(xù)進(jìn)行實(shí)際的重命名。
find . -type f -name "*.txt" -exec mv {} {}_old \;
我在 《Efficient Linux 命令行》一書中學(xué)到了這個(gè)技巧。一本充滿了這樣的小寶石的優(yōu)秀書。難怪它已成為 我最喜歡的 Linux 書籍之一。
使用 rename 命令輕松重命名多個(gè)文件
有一個(gè)名為 rename
的便捷命令行程序,可用于根據(jù)給定的 Perl 正則表達(dá)式模式批量重命名文件。
該實(shí)用程序不是 GNU 工具鏈的一部分,也不是預(yù)安裝的。因此,你必須首先使用發(fā)行版的包管理器來安裝它。
對(duì)于 Debian/Ubuntu,命令為:
sudo apt install rename
你可以通過以下方式使用它:
rename [options] perl_regex [files]
選項(xiàng)有:
-v
: 詳細(xì)模式-n
:無操作,顯示將被重命名的文件,但不重命名它們-o
: 不覆蓋-f
: 強(qiáng)制覆蓋現(xiàn)有文件-s
: 不重命名軟鏈接,只重命名其目標(biāo)
現(xiàn)在,讓我們采用你在上一節(jié)中看到的相同示例。將 *.txt
重命名為 .txt_old
。
rename 's/\.txt$/.txt_old/' **
我不打算在這里解釋正則表達(dá)式。**
表示查看所有子目錄中的所有文件。
正如你所看到的,它按預(yù)期工作。
總結(jié)
我希望你喜歡這個(gè)技巧,它可以幫助你學(xué)習(xí)在 Linux 命令行中執(zhí)行基本任務(wù)。當(dāng)然是針對(duì)那些想學(xué)習(xí)和使用命令行的人。桌面用戶始終擁有用于此類任務(wù)的 GUI 工具。
如果你對(duì) Linux 命令完全陌生,本系列將對(duì)你有很大幫助。
如果你有疑問或建議,請(qǐng)告訴我。