Como renomeio vários arquivos [duplicados]

2

Eu tenho alguns arquivos chamados

abc-10.5.3.1-1.x86_64.rpm
abc-compiler-10.5.3.1-1.x86_64.rpm
abc-10.5.3.1-6.x86_64.rpm   
abc-compiler-10.5.3.1-6.x86_64.rpm

Gostaria de remover os números das versões secundárias (1-1 e 1-6) quando os arquivos são criados. Eu não consigo descobrir como conseguir isso com o comando rename no Redhat linux. O nome do arquivo resultante deve, por exemplo, ser:

abc-10.5.3.x86_64.rpm

O comando não usa expressões regulares.

    
por KalenGi 27.11.2012 / 18:07

2 respostas

2

Caso você queira considerar alternativas para rename , com zsh, eu escreveria:

autoload -U zmv
zmv -n '(*).<->-<->(.[^.]##.rpm)' '$1$2'

(e remova -n quando feliz).

    
por 27.11.2012 / 19:02
2

Se o seu rename(1) é algo como este do Fedora eu não acho vai trabalhar para o que você quer fazer.

Aqui está uma abordagem que requer bash :

( shopt -s extglob
for f in ./*-+([.[:digit:]])-+([[:digit:]]).x86_64.rpm; do
    mv -v -- "$f" "${f%-+([[:digit:]]).x86_64.rpm)}.x86_64.rpm"
done )

A parte +([.[:digit:]]) deve corresponder ao número da versão principal / secundária e o +([[:digit:]]) após o - deve corresponder ao número do patch que você está tentando remover.

Você também pode fazer algo menos preciso com POSIX sh , que não possui extglob

for f in ./*-*-*.x86_64.rpm; do
    mv -v -- "$f" "${f%-*.x86_64.rpm}.x86_64.rpm"
done
    
por 27.11.2012 / 18:25

Tags