Como diminuir o nome do arquivo em 1 no Ubuntu

5

Eu tenho cerca de 200% de arquivos.png na minha pasta, nomeando como -

02.png
03.png
04.png
...
201.png

Como você pode ver, eu não tenho 01.png , então eu quero mudar o nome de todos os arquivos, diminuindo um para torná-lo como -

01.png
02.png
03.png
...
200.png

É possível fazê-lo através de qualquer comando no Ubuntu?

A seguir está o comando que estou tentando sem sorte -

rename -n '/d{2}\.png$d{2}-1\.png/' *.png
    
por Nesh 23.09.2015 / 08:09

1 resposta

6

Isso pode ser feito com um comando rename um pouco mais complexo:

rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png

Notas:

  • Você precisa separar a correspondência e a substituição por um / .
  • Você precisa agrupar a parte que deseja lembrar usando $1 com () (nesse caso, (\d{2,3}) ).
  • Você deve corresponder aos números de 2 e 3 dígitos ou 100.png se tornará 1-1.png .
  • Para usar uma aritmética ou funções na substituição, ela deve ser avaliada como uma expressão, é por isso que há um e após o fechamento / .
  • Para combinar strings em uma expressão avaliada, você precisa usar . (daí . ".png" ).
  • Para preencher strings com zeros (presumivelmente o que você deseja, já que seus arquivos originais as tinham), use sprintf . %02d será preenchido com zeros se o seu número não tiver pelo menos dois dígitos.

Exemplo:

$ rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) .  ".png"/e' *.png | head
02.png -> 01.png
03.png -> 02.png
04.png -> 03.png
05.png -> 04.png
06.png -> 05.png
07.png -> 06.png
08.png -> 07.png
09.png -> 08.png
100.png -> 99.png
101.png -> 100.png

Dependendo da versão de rename , talvez seja difícil renomear arquivos se o destino já existir. Nesses casos, uma solução simples é criar um diretório temporário e renomear / mover os arquivos para lá:

mkdir temp
rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png

Observe que / após temp precisa ser escapado ou será considerado como o comando final / de s// .

    
por muru 23.09.2015 / 08:44