Usando 'renomear' & regex para editar nomes de arquivos

3

Sou novo na expressão regular e estou tentando usar o regex para renomear alguns arquivos. Estou usando rename ( este ) para renomear esses arquivos. Abaixo está um exemplo de comando.

$ rename -n 's/\(feat.//' *.mp3 ( -n option = execução a seco)

Saída:

'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'

O que estou tentando fazer é remover "(feat. artist_name )" dos nomes dos arquivos. (Do parêntese de abertura ao parêntese de fechamento). Mas eu não quero remover qualquer outra existência de parênteses dos nomes de arquivos. Por exemplo, renomeie "214 Flume - Sem sono (feat. Jezzabell Doran) (Shlohmo Remix) .mp3" para "214 Flume - Sem sono (Shlohmo Remix) .mp3"

(Editar: Thomas deu uma responder referente ao que está abaixo)
Eu sei para remover o "-" nos nomes dos arquivos para fazer 's/ - //' , mas como eu poderia fazer isso no mesmo comando como rename 's/\(feat.//' *.mp3 em vez de fazer rename 's/ - //' *.mp3 como um comando separado

    
por cryptic 28.05.2016 / 02:08

2 respostas

1

O que você parece querer é uma correspondência não voraz até e incluindo um parêntese de fechamento. Você também deve escapar do período se quiser que ele seja tratado como literal:

$ 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
    
por 28.05.2016 / 02:19
1

O comando é como sed , que permite especificar várias substituições usando uma opção -e , por exemplo,

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

e obtenha

'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'

Na documentação, diz

-e, --expr

The code argument to this option should be a Perl expression that assumes the filename in the $_ variable and modifies it for the filenames to be renamed. When no other -c, -C, -e, -s, or -z options are given, you can omit the -e from infront of the code.

    
por 28.05.2016 / 02:18