Linux如何批量重命名文件? rename命令快速修改多個文件名的技巧

linux中批量修改文件名可用rename命令,其支持正則表達式進行高效操作。1.統一改后綴可用rename ‘s/.txt/.log/’ *.txt;2.替換關鍵詞如photo→image用rename ‘s/photo/image/’ *.jpg,加g為全局替換;3.添加前綴用rename ‘s/^/project_/’ *.txt,刪除前綴用rename ‘s/^temp_//’ *.txt;4.利用正則可實現去數字、轉大小寫、補零等復雜操作,如補零命令為rename ‘s/(d+)/sprintf("%02d", $1)/e’ *.txt。使用前建議查手冊man rename以確認語法風格。

Linux如何批量重命名文件? rename命令快速修改多個文件名的技巧

linux系統中,如果你需要一次性修改多個文件的名字,比如統一改后綴、替換關鍵詞或者添加前綴,用rename命令是最直接有效的方法。它不像mv那樣只能一個個處理,而是支持批量操作,尤其適合有規律的文件名修改。

Linux如何批量重命名文件? rename命令快速修改多個文件名的技巧

基礎語法別搞錯

使用rename之前,先了解它的基本格式:

Linux如何批量重命名文件? rename命令快速修改多個文件名的技巧

rename 's/舊內容/新內容/' 文件列表

這里的s/舊內容/新內容/是perl風格的正則表達式寫法,表示“把匹配到的內容替換成新的”。例如,你想把所有.txt文件改成.log結尾,可以這樣寫:

rename 's/.txt/.log/' *.txt

注意:有些發行版(比如debian/ubuntu)的rename命令略有不同,它接受更直觀的參數形式:

Linux如何批量重命名文件? rename命令快速修改多個文件名的技巧

rename .txt .log *.txt

所以在實際使用前建議先查一下手冊 man rename,確認你系統上用的是哪種風格。

替換文件名中的特定字符串

假設你有一圖片文件,名字里都帶了“photo”,現在想改成“image”,比如從photo1.jpg變成image1.jpg,可以用:

rename 's/photo/image/' *.jpg

這個命令會查找當前目錄下所有.jpg文件,把文件名里的第一個“photo”替換成“image”。

如果你想替換全部出現的位置,比如文件名中有多個“photo”,可以在末尾加g表示全局替換:

rename 's/photo/image/g' *.jpg

這樣就能一次搞定所有位置的替換。

添加或刪除文件名前綴/后綴

有時候你想給一批文件加上統一的前綴,比如project_,變成project_file1.txt這種格式。雖然rename不直接支持添加前綴,但可以通過正則的方式實現:

rename 's/^/project_/' *.txt

這里^表示行首,所以就是在文件名開頭插入project_。

反過來,如果要刪掉前綴也很簡單,比如去掉文件名最前面的temp_:

rename 's/^temp_//' *.txt

同樣地,你可以用$來匹配結尾,比如刪除某個固定后綴:

rename 's/_backup$//' *_backup.txt

這條命令會把所有以_backup.txt結尾的文件,去掉_backup部分。

使用通配符和正則提高靈活性

rename的強大之處在于它支持正則表達式,這意味著你可以做很多靈活的操作。

比如你想去掉文件名中的數字:

rename 's/d+//' *.txt

這會刪除每個.txt文件名中的第一組數字。

又比如你想把小寫字母變成大寫:

rename 'y/a-z/A-Z/' *.txt

這是利用了字符集轉換的功能,適用于整批轉大小寫的場景。

再舉個例子,如果你只想修改一部分數字格式,比如把file1.txt變成file01.txt,補零操作就需要稍微復雜點的正則技巧:

rename 's/(d+)/sprintf("%02d", $1)/e' *.txt

這個命令用了Perl的sprintf函數進行格式化輸出,其中%02d表示兩位數補零。


總的來說,rename是一個非常實用的命令,掌握幾個常用正則寫法就能應對大多數批量重命名需求。剛開始可能會覺得有點繞,但一旦熟悉之后效率非常高。基本上就這些常用操作,記住幾個典型例子,碰到類似情況套進去改一改就行。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享