Como posso renomear muitos arquivos usando uma regex?

20

Quero renomear muitos arquivos no Mac OS X (10.7.2). Não tenho o pacote perl para o renamecomando.

Meus arquivos têm nomes como "T452-102456-0.png" e quero excluir a parte "-0". Sei que posso executar essa ação escrevendo meu próprio script php-cli, mas gostaria de saber sobre uma solução mais fácil e rápida.

Raphaël
fonte
Não há contradição lógica entre “muitos arquivos pdf” e “Meus arquivos têm nomes como" T452-102456-0.png ""?
Manatwork
Ah ... o tipo de arquivo não importa, mas é verdade ^^. I edição, obrigado pelo seu comentário =)
Raphaël

Respostas:

21

Bash ou Ksh junto com mvpoderiam resolvê-lo:

for f in *.png; do mv -n "$f" "${f/-0}"; done

Caso o nome do arquivo também possua "0" após o primeiro traço e o "-0" esteja sempre na frente do ponto, convém incluir esse ponto também na expressão:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

Mas, como essa regra de renomeação é simples, se você possui renameo pacote util-linux , isso também será feito:

rename '-0.' '.' *.png
homem a trabalhar
fonte
funciona perfeitamente. Muito obrigado =)
Raphaël
3

Método simples: arquivos apenas no diretório atual

Com zsh:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

Com outras conchas:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


Método aprimorado: arquivos no diretório atual e / ou subdiretórios

Com zsh:

zmv '(**/)(*)-0(.png)' '$1$2$3'

Com ksh93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

Com bash ≥4, como acima, mas use em shopt -s globstarvez do setcomando.

Com outras conchas:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Gilles 'SO- parar de ser mau'
fonte
outro ótimo motivo para instalar o zsh:) .... zmv
danidee
2

No Fish Shell no OSX:

for f in *.png; mv -n $f (basename $f -0.png).png; end

Fish Shell: https://fishshell.com/

jeffmcneill
fonte
2
E voto negativo por que motivo? Esta é uma resposta válida para a pergunta.
101317 jeffmcneill
0

Se você tiver o mmvpacote:

mmv '*-0.png' '#1.png'

Assim como (versões recentes de) rename, isso tomará um cuidado razoável para evitar a substituição de arquivos existentes.

Toby Speight
fonte