重命名文件夹中的文件名时,通配符不适用于重命名

重命名文件夹中的文件名时,通配符不适用于重命名

我在一个文件夹中有一系列文件,文件名中间有一个以_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' *

命令。然而,什么也没有发生。显然,通配符不适用于我的计算机上的重命名。用反斜杠转义__无论如何都不是保留字符)或此类技巧没有任何区别。我究竟做错了什么?

答案1

假设您的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后跟零个或多个数字)来修复它。

相关内容