Massa renomear arquivos com bash

3

Eu tenho vários arquivos numerados como este:

file #01.ext
file #02.ext
file #03.ext
file #04.ext
file #05.ext

E o que eu quero é fazer com que todos tenham três dígitos (dois 0s iniciais) em vez de um, então;

file #001.ext
file #002.ext
file #003.ext
file #004.ext
file #005.ext

Meu pensamento é usar sed para substituir o # por # 0 (que no meu caso é bom o suficiente, não há arquivos acima do # 99 ainda). Todos os arquivos estão na mesma pasta, como eu faria isso?

    
por Rob 30.10.2011 / 02:37

4 respostas

2

Para proteger arquivos com 3 dígitos já

for f in "file #"*.ext; do
  num=${f#file #}
  num=${num%.ext}
  new=$(printf "file #%03d.ext" $num)
  echo mv "$f" "$new"
done

Isso exibirá no console os comandos a serem executados, mas na verdade não renomeará os arquivos.

Quando estiver satisfeito com o que pretende fazer, pode fazê-lo mudar o nome dos ficheiros removendo a palavra echo e reexecutando-a.

    
por 30.10.2011 / 13:24
2

Você não precisa sed para isso. Isso pode ser feito com um comando muito simples:

rename 's/#0/#00/' *.ext

Exemplo:

temp$ ls
file #01.ext  file #02.ext  file #03.ext  file #04.ext  file #05.ext
temp$ rename 's/#0/#00/' *.ext
temp$ ls
file #001.ext  file #002.ext  file #003.ext  file #004.ext  file #005.ext
    
por 01.11.2012 / 18:00
1

Isso faz o truque da pasta:

ls | sed 's/\(.*\)#\(.*\)/mv "&" "#0"/' | sh
    
por 30.10.2011 / 02:35
0

Esta é uma solução híbrida:

ls | sed -r "s/(.*#)([0-9]+)([^0-9]*)/printf 'mv -v \"&\" \"%s%03d%s\"' \"\" \"\" \"\"/e;e"
    
por 31.10.2011 / 22:54

Tags