Remova os últimos n caracteres de nomes de arquivos de todos os arquivos em um diretório

5

Como posso remover os últimos 12 caracteres dos nomes de arquivos de todos os arquivos em um determinado diretório via Terminal?

    
por Markus Gratis 19.01.2017 / 06:03

2 respostas

5

Usando a expansão do parâmetro bash :

for i in ?????????????*; do echo mv -i "$i" "${i%????????????}"; done

remova echo da ação real. Verifique o mesmo nome do arquivo de saída para vários arquivos de origem.

Você também pode usar o padrão de substituição de expansão de parâmetro:

for i in ?????????????*; do echo mv -i "$i" "${i/????????????}"; done

Usando rename ( prename ), desse diretório:

rename -n 's/.{12}$//' *

Isso renomeará todos os arquivos e diretórios, se você quiser fazer apenas por arquivos:

find . -maxdepth 1 -type f -name '?????????????*' -exec rename -n 's/.{12}$//' {} +

Isso executará a execução a seco, removerá -n da ação real:

find . -maxdepth 1 -type f -name '?????????????*' -exec rename 's/.{12}$//' {} +

Novamente, isso pode resultar em uma condição de corrida, certifique-se de verificar cuidadosamente a saída da operação a seco.

    
por heemayl 19.01.2017 / 06:09
3

Você pode usar rename . De dentro do diretório:

rename -n 's/(.*).{12}//' *

Remova -n após o teste para realmente renomear os arquivos. Substitua {12} por {whatever number of characters you want to delete from the end of the name}

Explicação

  • s/old/new/' replace old with new '
  • (.*) salva qualquer número de caracteres ...
  • .{12} os últimos doze caracteres, sejam eles quais forem
  • os caracteres salvos com ()
por Zanna 19.01.2017 / 06:07