Bash
在 bash shell 腳本中,如何重命名多個文件,只保留原始文件名的數字和副檔名?
我有一個目錄,裡面有一堆文件,名稱如下:
- 通用名稱- dd -01 _.txt
- 通用名稱- dd -02 _.txt
- 通用名稱- dd -03 _.txt
- 通用名稱- dd -04 _.txt
我想重命名所有這些,只保留這樣的數字和副檔名:
- 01.txt
- 02.txt
- 03.txt
- 04.txt
如何使用 shell 腳本執行此操作?
Perl 重命名
我會使用(perl-)重命名。發行版提供兩種類型的重命名,因此您可以檢查是否安裝了 perl 版本的重命名
$ rename --version perl-rename 1.9
執行它以
-n
將命令測試為“試執行”。$ rename 's/[^0-9]*([0-9]*).*/\1.txt/' * -n generic name- dd -01 _.txt -> 01.txt generic name- dd -02 _.txt -> 02.txt generic name- dd -03 _.txt -> 03.txt generic name- dd -04 _.txt -> 04.txt
當你高興時,執行命令本身。
$ rename 's/[^0-9]*([0-9]*).*/\1.txt/' *
解釋
rename 's/foo/bar/' *
: 重命名所有文件 (*
),將正則表達式替換foo
為bar
.[^0-9]*([0-9]*).*
: 匹配所有非數字字元[^0-9]*
,後跟數字字元,包含在“擷取組”([0-9]*)
中,然後是其餘字元.*
。這將匹配整個文件名。\1.txt
:用擷取的組替換文件名\1
,附加.txt
.另一個重命名
如果您安裝了更簡單的重命名,您將看到類似這樣的內容。
$ rename --version rename from util-linux 2.33.1
在這種情況下,您可以使用以下兩個命令:
$ rename 'generic name- dd -' '' * $ rename ' _' '' *
但我強烈建議改為學習 perl-rename。