rename — 批次重新命名檔案

使用 Perl 正規表示式批次重新命名多個檔案。

語法

rename [選項] 表示式 檔案...

常用選項

選項 說明 範例
-n, --dry-run 模擬執行(只顯示會做什麼,不實際重新命名) rename -n "s/.txt/.md/" *.txt
-v, --verbose 顯示每個被重新命名的檔案 rename -v "s/ /_/" *.jpg
-f, --force 強制覆蓋目的地已存在的檔案 rename -f "s/old/new/" *

使用範例

範例 1:批次替換副檔名

將當前目錄所有 .txt 改為 .md。

$ rename "s/\.txt$/.md/" *.txt
範例 2:先用 dry-run 確認再執行

先加 -n 看會改哪些檔案,確認無誤再去掉 -n 執行。

$ rename -n "s/IMG_/photo_/g" IMG_*.jpg
rename(IMG_0001.jpg, photo_0001.jpg)
rename(IMG_0002.jpg, photo_0002.jpg)
範例 3:副檔名轉大寫

將 .jpg 改為 .JPG(使用 Perl 的 uc 函數)。

$ rename "s/\.jpg$/\.JPG/" *.jpg
範例 4:將空格替換為底線

處理檔名中的空格(Linux 檔名有空格常造成困擾)。

$ rename -v "s/ /_/g" ./*.jpg
my photo.jpg renamed as my_photo.jpg

常見錯誤與排錯

rename: command not found
原因
rename(Perl 版)未安裝,或使用的是不同版本(util-linux 版)。
解法
sudo apt install rename(安裝 Perl 版 rename,也叫 prename)。

延伸閱讀