Renomeia centenas de arquivos

1

Estou usando o Elementary OS (ainda muito novo em qualquer sistema UNIX) e tenho centenas de arquivos de texto no disco rígido antigo que preciso classificar. Todos os arquivos de texto têm um nome como;

lua - eng1-6TH4eI8gtf3.txt

Eu preciso de um comando que possa remover os últimos 11 caracteres de todos eles, mas ainda assim deixar a extensão. Olhando em volta, vi o comando "renomear", mas não tenho certeza se isso funcionaria para mim.

Um comando que eu poderia simplesmente copiar, colar e alterar qualquer coisa como um diretório seria incrível, e uma explicação do que tudo faz.

    
por Zachary Wight 24.03.2016 / 09:13

1 resposta

3

Este comando deve funcionar bem para você, como eu testei em alguns arquivos de exemplo com o mesmo padrão que o seu:

rename 's/(.*)(-.{11})\.txt$/$1\.txt/' *

Explicação:

Veja este comando simples:

rename 's/pattern/result/' filename(s)

O padrão pode ser regex. Então, podemos pegar uma parte diferente do texto (que é o nome do arquivo). Se você não entende, pesquise por regex. Parece complexo, mas se você aprender, é fácil.

Como resultado, pego o conteúdo do primeiro parêntese por $1 e deixo o segundo parêntese e, no final, adiciono .txt a ele.

Aviso Importnat
Primeiro execute o comando com a opção -n -v para ver apenas o que o comando faria. Se o resultado é o que você deseja, execute-o sem opções. Então, primeiro corra assim:

$ rename -n -v 's/(.*)(-.{11})\.txt$/$1\.txt/' *
rename(lua - eng1-6TH4eI8gtf3.txt, lua - eng1.txt)
rename(lua - eng2-6TH4eI8gtf4.txt, lua - eng2.txt)
rename(lua - eng4-6TH4eI8gtf5.txt, lua - eng4.txt)
    
por 24.03.2016 / 10:23