在linux中批量重命名文件可用rename和mmv命令。rename支持正則表達式,適用于統一替換操作,如修改后綴、加前綴、去空格等;使用格式為rename ‘s/原內容/新內容/’ 文件列表。mmv適合結構化重命名,支持通配符匹配,常用于編號重組、路徑拼接等場景;語法為mmv "匹配模式" "替換模式"。rename靈活但需注意轉義字符,mmv直觀但需用雙引號包裹模式;簡單替換用rename,復雜結構用mmv。
在linux系統中,批量重命名文件是常見的操作需求,比如整理照片、日志文件歸檔、數據預處理等。如果你還在手動一個一個改名,那確實有點費勁了。其實,用好 rename 和 mmv 這兩個命令,可以非常高效地完成批量重命名任務。
一、rename:基礎又強大的批量改名利器
rename 命令支持正則表達式,適合做統一格式的替換操作,比如去掉空格、添加前綴、修改擴展名等。
使用方法:
rename 's/原內容/新內容/' 文件列表
舉個例子,把所有 .txt 文件改成 .log:
rename 's/.txt$/.log/' *.txt
注意這里用了 perl 兼容的正則語法,所以括號、點號這些特殊字符要加反斜杠轉義。
常見用途:
-
批量去除文件名中的空格(替換為空):
rename 's/ //g' *.jpg
-
給文件統一加前綴:
rename 's/^/photo_/' *.jpg
-
修改后綴名:
rename 's/.bak$/.old/' *.bak
?? 小提示:建議先加上 -n 參數測試效果,確認沒問題再執行真實操作。
二、mmv:適合復雜匹配與結構化重命名
mmv 是另一個專門用于批量移動、復制、追加和重命名文件的工具,尤其適合有規律的文件名轉換,比如按編號排序、拼接路徑等。
不過默認很多系統沒裝這個命令,你需要先安裝:
sudo apt install mmv # Debian/Ubuntu sudo yum install mmv # centos
基本語法:
mmv "匹配模式" "替換模式"
比如,將 file1.txt, file2.txt 改為 newfile1.txt, newfile2.txt:
mmv "file*.txt" "newfile#1.txt"
這里的 #1 表示第一個通配符的內容。
實際應用場景:
-
給文件加固定前綴:
mmv "*.log" "backup_#1.log"
-
交換文件名順序(比如從“年月日”改為“日月年”):
mmv "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" "#4#5#6#7#8#1#2#3"
這樣 20240315 就會變成 15202403。
-
多層目錄下批量重命名:
find . -name "*.tmp" -exec mmv "{}" "{}.old" ;
? 使用技巧:mmv 的模式匹配比較嚴格,記得引號要用雙引號,避免被 shell 提前解析。
三、什么時候用哪個?
簡單總結一下兩者適用場景:
- rename 更適合基于正則表達式的靈活替換,適合有一定腳本經驗的人;
- mmv 更適合結構化的、有編號或固定格式的批量重命名,邏輯更直觀。
如果你只是想統一替換某個字符串,或者調整大小寫,rename 足夠了;但如果你要做復雜的編號重組、路徑拼接,那就更適合用 mmv。
基本上就這些。這兩個命令都不復雜,但在實際使用時容易忽略一些細節,比如是否需要轉義字符、是否要測試運行等。用好了,它們能大大提升你處理文件的效率。