使用“重命名”和正则表达式编辑文件名

使用“重命名”和正则表达式编辑文件名

我是正则表达式的新手,并且正在尝试使用正则表达式来重命名一些文件。我在用rename这个) 重命名所述文件。下面是一个示例命令。

$ rename -n 's/\(feat.//' *.mp3-n选项 = 试运行)

输出:

'103 Flume - Left Alone (feat. Jezzabell Doran).mp3' 
would be renamed to '103 Flume - Left Alone  Jezzabell Doran).mp3'

'214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix).mp3' 
would be renamed to '214 Flume - Sleepless  Jezzabell Doran) (Shlohmo Remix).mp3'

我想做的是删除“(壮举。艺术家姓名)" 从文件名中。(从左括号到右括号)。但我不想从文件名中删除任何其他存在的括号。例如,重命名“214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix) ).mp3" 至 "214 Flume - Sleepless (Shlohmo Remix).mp3"

(编辑:托马斯给了一个回答与下面的内容有关)
我知道要删除文件名中的“-”,'s/ - //'但是我如何在同一个命令中执行此操作,而rename 's/\(feat.//' *.mp3不是rename 's/ - //' *.mp3作为单独的命令执行此操作

答案1

该命令类似于sed,它允许您使用选项指定多个替换-e,例如,

rename -n -e 's/\(feat.//' -e 's/ - //' *.mp3

并得到

'103 Flume - Left Alone (feat. Jezzabell Doran).mp3' would be renamed to '103 FlumeLeft Alone  Jezzabell Doran).mp3'                                            
'214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix).mp3' would be renamed to '214 FlumeSleepless  Jezzabell Doran) (Shlohmo Remix).mp3'

在文档中,它说

-e,--expr

此选项的代码参数应该是一个 Perl 表达式,它采用变量中的文件名$_并修改它以重命名文件名。当没有给出其他-c-C-e-s或选项时,您可以-z忽略来自-e代码前面的。

答案2

你似乎想要的是非贪婪匹配并包含右括号。如果您希望将其视为字面意思,您还应该转义句点:

$ rename -n 's/\(feat\..*?\)//' *.mp3
103 Flume - Left Alone (feat. Jezzabell Doran).mp3 renamed as 103 Flume - Left Alone .mp3
214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix).mp3 renamed as 214 Flume - Sleepless  (Shlohmo Remix).mp3

相关内容