Múltiplas expressões no utilitário de linha de comando 'renomear'

0

Estou aprendendo a usar o utilitário Unix de linha de comando rename (veja, por exemplo, link ).

O manual para rename diz que você pode combinar várias regras de renomeação (observe, é uma sinopse do uso onde eu removo outros argumentos para clareza):

rename [ -e|-E perlexpr]*|perlexpr [ files ]

Eu tento fazer isso no seguinte exemplo oficial. Eu tenho um diretório com arquivos:

$ ls
01.php  02.php  03.php

Eu aplico duas transformações usando um rename invokation:

rename -n -v -e "s/\.php$/\.htm/" "y/a-z/A-Z/" *

O comportamento esperado é que eu terei:

$ ls
01.HTM  02.HTM  03.HTM

No entanto, a saída de rename é

rename(01.php, 01.htm)
rename(02.php, 02.htm)
rename(03.php, 03.htm)

ou seja, a segunda transformação (caracteres minúsculos a maiúsculos) não é aplicada.

Como combinar várias expressões juntas?

    
por Dmitry Kabanov 26.06.2018 / 13:52

1 resposta

2

Para combinar várias expressões, separe as expressões com um ponto-e-vírgula (separador de instruções em Perl):

rename -n -v -e "s/\.php$/\.htm/; y/a-z/A-Z/" *

Variantes adicionais baseadas nos comentários de @AFH

Outra maneira (não é necessário usar -e , apenas combine todas as expressões com ; ):

rename -n -v "s/\.php$/\.htm/; y/a-z/A-Z/" *

Mais uma forma (prefixar cada expressão com -e ; observe ; no final da primeira expressão):

rename -n -v -e "s/\.php$/\.htm/;" -e "y/a-z/A-Z/" *

Mais uma forma (prefixar cada expressão com -E , que adiciona ; implicitamente):

rename -n -v -E "s/\.php$/\.htm/" -E "y/a-z/A-Z/" *
    
por 26.06.2018 / 14:03