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.pdf
renomeado 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.mp3
to01 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.pdf
renomeado 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).