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.


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

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' _ {} +

outro ótimo motivo para instalar o zsh:) .... zmv
danidee


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.