Eu uso rename o tempo todo. É bem simples, mas esperamos que você saiba regex básico:
rename "s/SEARCH/REPLACE/g" *
Isso substituirá a string SEARCH por REPLACE em todos os arquivos (ou seja, * ). O /g significa global, portanto, se você tivesse um SEARCH_SEARCH.jpg , ele seria renomeado REPLACE_REPLACE.jpg . Se você não tivesse /g , só teria feito substituição uma vez e, portanto, agora chamado de REPLACE_SEARCH.jpg . Se você não quiser diferenciar maiúsculas de minúsculas, adicione /i (isso seria, /gi ou /ig no final).
Com expressões regulares, você pode fazer muito mais.
Observe que esse rename é o comando prename (também conhecido como Perl rename ), que oferece suporte a Expressões regulares Perl. Há outro rename que usa padrões e não é tão poderoso. prename é instalado por padrão no Ubuntu (junto com o Perl).
Aqui estão alguns exemplos:
Prefixo
Adicionar :
rename 's/^/MyPrefix_/' *
-
document.pdfrenomeado paraMyPrefix_document.pdf
Remover :
Além disso, você pode remover seqüências indesejadas. Digamos que você tivesse 20 arquivos MP3 chamados CD RIP 01 Song.mp3 e você queria remover a parte "CD RIP", e você queria remover isso de todos eles com um comando.
rename 's/^CD RIP //' *
-
CD RIP 01 Song.mp3to01 Song.mp3
Observe o espaço extra em '^CD RIP ' , sem o espaço, todos os arquivos teriam um espaço como o primeiro caractere do arquivo. Observe também que isso funcionará sem o caractere ^ , mas corresponderia a CD RIP em qualquer parte do nome do arquivo. O ^ garante que apenas remove os caracteres se eles forem o começo do arquivo.
Sufixo
Adicionar :
rename 's/$/_MySuffix/' *
-
document.pdfrenomeado paradocument.pdf_MySuffix
Alterar :
rename 's/\.pdf$/.doc/' *
mudará Something.pdf para Something.doc . (O motivo da barra invertida é, . é um caractere curinga no regexp, então .pdf corresponde a qPDF , enquanto \.pdf corresponde apenas à sequência exata .pdf . Também é muito importante observar, se você não estiver familiarizado com BASH, você deve colocar barras invertidas em citações SINGLE! Você não pode omitir aspas ou usar aspas duplas, ou o bash tentará traduzi-las.Para bash \. e "\." equals . . ( Mas as aspas duplas e as barras invertidas são usadas, por exemplo, "\ n" para uma nova linha, mas como "\." não é uma seqüência de escape de volta válida, ela se traduz em . )
Na verdade, você pode até mesmo colocar as partes da string entre aspas em vez do todo: 's/Search/Replace/g' é o mesmo que s/'Search'/'Replace'/g e s/Search/Replace/g para BASH. Você só precisa ter cuidado com caracteres especiais (e espaços).
Sugiro usar a opção -n quando você não estiver certo de que possui as expressões regulares corretas. Ele mostra o que seria renomeado e sai sem fazê-lo. Por exemplo:
rename -n s/'One'/'Two'/g *
Isso listará todas as alterações que teria sido feito se você não colocasse o -n flag lá. Se parecer bom, pressione Up para voltar, depois apague o -n e pressione Enter (ou substitua-o por -v para gerar todas as alterações feitas).