Como posso renomear muitos arquivos usando um regex?

19

Eu quero renomear muitos arquivos no Mac OS X (10.7.2) .. Eu não tenho o pacote perl para o comando rename .

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

    
por Raphaël 07.11.2011 / 13:14

4 respostas

20

Bash ou Ksh junto com mv poderiam resolvê-lo:

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

Caso o nome do arquivo também tenha "0" após o primeiro traço e o "-0" esteja sempre à frente do ponto, você pode querer 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ê tiver rename do pacote util-linux , isso também será feito:

rename '-0.' '.' *.png
    
por 07.11.2011 / 13:25
3

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

Com zsh:

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

Com outros shells:

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


Método avançado: 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 shopt -s globstar em vez do comando set .

Com outros shells:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
    
por 08.11.2011 / 00:18
2

Na Fish Shell no OSX:

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

Fish Shell: link

    
por 05.08.2016 / 05:43
0

Se você tiver o pacote mmv :

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

Como (versões recentes de) rename , isso vai tomar cuidado para evitar sobrescrever arquivos existentes.

    
por 23.09.2015 / 18:18

Tags