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)。