Renomear comando para excluir substring

1

Estou tentando renomear em lote os seguintes arquivos:

art-faculty-3_29060055362_o.jpeg  
fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg  
theatre-faculty-2016-2017-1_29132529356_o.jpeg
art-history-faculty-2016-2017-1_29060057642_o.jpeg         
music-faculty-2016-2017-1_29132523816_o.jpeg

Gostaria de renomeá-los para:

art-faculty.jpeg                           
fine-arts-division-faculty.jpeg
theatre-faculty.jpeg
art-history-faculty.jpeg  
music-faculty.jpeg

Aqui está o que eu tenho até agora:

rename -n -D '/faculty(.*)/g' -X -v *

Isso retorna:

Using expression: sub { use feature ':5.18'; s/\/faculty\(\.\*\)\/g//g; s/\.   ([^.]+)\z//x and do { push @EXT, $1; $EXT = join ".", reverse @EXT } }
'art-faculty-3_29060055362_o.jpeg' unchanged
'art-history-faculty-2016-2017-1_29060057642_o.jpeg' unchanged
'fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg' unchanged
'music-faculty-2016-2017-1_29132523816_o.jpeg' unchanged
'theatre-faculty-2016-2017-1_29132529356_o.jpeg' unchanged

É possível usar o REGEX com a transformação delete (-D)? Se sim, como eu o usaria para fazer a transformação que mostro acima? Se não, por favor, aponte-me na direção certa para realizar transformações com rename usando REGEX.

    
por Lea Fox 25.08.2016 / 17:15

1 resposta

1
for i in *.jpeg; do echo mv "$i" "${i%faculty*}faculty.jpeg" ; done

se estiver de acordo com os requisitos, remova echo para alterar os nomes dos arquivos

O comando perl rename no meu sistema tem apenas as opções -v -f -n

$ rename -n 's/faculty\K.*(?=\.jpeg)//' *.jpeg
art-faculty-3_29060055362_o.jpeg renamed as art-faculty.jpeg
art-history-faculty-2016-2017-1_29060057642_o.jpeg renamed as art-history-faculty.jpeg
fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg renamed as fine-arts-division-faculty.jpeg
music-faculty-2016-2017-1_29132523816_o.jpeg renamed as music-faculty.jpeg
theatre-faculty-2016-2017-1_29132529356_o.jpeg renamed as theatre-faculty.jpeg
    
por 25.08.2016 / 17:38