Renomear o arquivo em massa no Bash, mas mantendo uma seção do nome do arquivo

4

Eu tenho um grande número de arquivos .jpg que possuem dados estranhos à frente de um id de arquivo que eu preciso remover para configurar melhor minha estrutura de arquivos para um projeto posterior. Como posso renomear um lote na linha de comando ou no Bash (bash é preferível)

Exemplo: A_file_name_f3xe3_1_60113520.jpg - (60113520 sendo o ID) Tornar-se: 60113520.jpg

Todos os arquivos têm sublinhados antes do ID, mas são colocados sublinhados extras aleatoriamente em outro lugar no nome.

    
por Nema 20.12.2012 / 21:54

2 respostas

4

Existe um comando especialmente adequado para isso:

rename -n 's/.*?(\d+.jpg$)/$1/' *.jpg

É prename on debian e derivado, e é um executável perl .

Remova o interruptor -n se o seu teste se adequar às suas necessidades.

Para torná-lo o padrão (ainda debian e derivado:

 update-alternatives --set rename /usr/bin/prename
    
por 20.12.2012 / 22:12
1

Use o seguinte:

for FILE in *.jpg ; do mv -v "$FILE" "${FILE//*_/}" ; done

Isso remove tudo em nomes de arquivos JPG até e incluindo o último sublinhado no nome do arquivo. É descrito aqui na seção Substituição da Substring :

${string//substring/replacement}

Replace all matches of $substring with $replacement.

No seu caso, replacement está vazio.

    
por 20.12.2012 / 21:58