Я хочу переименовать много файлов, например
Tum Hi Ho [www.DJMaza.Com].mp3
кTum Hi Ho.mp3
Для этого я использовал эту команду. Но почему-то она не работает.
`rename -n 's/(.*)([.*])(\.mp3)/$1$3/' *.mp3`
решение1
Вы были близки, но не совсем:
rename -n 's/\[[^\]]+\]//' *.mp3
Проблема в том, что []
это специальная конструкция регулярного выражения, и поэтому скобки должны быть экранированы, если они должны соответствовать фактическим скобкам. Это цель обратных косых черт в моей версии.
Неэкранированные скобки образуют то, что называется классом символов. Класс символов может в принципе соответствовать любому из символов внутри скобок. Так что [.*]
соответствует точке или звездочке. Когда вы добавляете каретку ( ^
) в начало класса, он соответствует любому символунетв скобках.
В моем регулярном выражении мы сопоставляем открывающуюся скобку \[
, один или несколько символов, которые не являются закрывающимися скобками, [^\]]+
плюс закрывающуюся скобку \]
и удаляем все это.