Rename

重命名文件夾中的文件名時,萬用字元不適用於重命名

  • October 4, 2019

我在一個文件夾中有一系列文件,文件名中間有一個以_S( _S1, S2, S143….) 開頭的字元串,我需要用下劃線刪除/替換它們。像這樣

file1_S1_R1 
file2_S2_R1 
file3_S95_R1
file4_S143_R1

應該是

file1_R1 
file2_R1 
file3_R1
file4_R1

我試過標準

rename 's/_S*_/_/g' *

命令。然而,什麼也沒有發生。顯然,萬用字元不適用於我的電腦上的重命名。_用反斜杠轉義(無論如何_都不是保留字元)或這樣的技巧沒有區別。我究竟做錯了什麼?

假設您的rename實用程序是 Perlrename實用程序(它採用 Perl 表達式,通常是替換錶達式,作為其第一個參數):

$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file1_S1_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file2_S2_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file3_S95_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file4_S143_R1
$ rename 's/_S\d*_/_/g' *
$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file1_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file2_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file3_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file4_R1

您可能假設您將使用文件名通配模式而不是 Perl 正則表達式,因此您弄錯了正則表達式。我通過將S*(匹配零個或多個S字元)更改為S\d*(匹配一個S後跟零個或多個數字)來修復它。

引用自:https://unix.stackexchange.com/questions/545068