Massa renomeando arquivos, removendo pontos

1

Eu quero renomear arquivos para excluir pontos desnecessários. ou seja:

File.something.jpg -> Filesomething.jpg
I.Have.Too.Many.Dots.png -> IHaveTooManyDots.png

Como isso pode ser feito? find -name *.*.* lista todos eles, mas não consegui escrever uma expressão para sed, pois ela não suporta expressões regulares preguiçosas.

    
por Robus 14.09.2010 / 20:51

2 respostas

3

Experimente:

sed ':a;s/\.\([^.]\+\)\././;ta' 

Você poderia usá-lo assim:

find -name "*.*.*" | xargs -I % bash -c 'mv "%" "$(echo "%" | sed "s|^./||;:a;s/\.\([^.]\+\)\././;ta")"'

Ele foi polvilhado livremente com aspas, por isso deve funcionar com nomes de arquivos que incluam espaços.

    
por 14.09.2010 / 21:22
2

Usando o bash:

find . -name '*.*.*' -exec bash -c 'base=${0##*/}; base=${base%.*}; mv "$0" "${0%/*}/${base//./}.${0##*.}"' {} \;

Usando o zsh:

autoload zmv
zmv '(**/)(*).(*)' '$1${2//./}.$3'
    
por 14.09.2010 / 22:10