Renomeação em lote de arquivos com número crescente

1

Eu tenho um lote de arquivos:

$ ls
Li1Fe1O2_11 Li1Fe2O3_8  Li1Fe3O4_2  Li1Fe3O4_5  Li2Fe1O3_16 Li2Fe2O4_12 Li3Fe1O4_19 Li3Fe1O4_22
Li1Fe1O2_14 Li1Fe2O3_9  Li1Fe3O4_3  Li1Fe3O4_6  Li2Fe1O3_17 Li2Fe2O4_13 Li3Fe1O4_20
Li1Fe2O3_7  Li1Fe3O4_1  Li1Fe3O4_4  Li2Fe1O3_15 Li2Fe2O4_10 Li3Fe1O4_18 Li3Fe1O4_21

Eu gostaria de renomeá-los para:

enum-00132
enum-00133
enum-00134
...

Eu tentei mudar o nome sem sucesso.

    
por user40780 25.08.2015 / 19:26

1 resposta

2

Use isto:

c=132
for f in *; do
  mv -v "$f" "enum-$(printf '%0*d' 5 $c)"
  c=$(($c+1))
done

O c=<your_starting_number> ; Eu assumi 132 como na sua pergunta. Em seguida, o loop for é executado por todos os arquivos no diretório atual. Para cada arquivo, o comando mv é chamado. o utilitário printf imprime o novo nome de arquivo com zeros à esquerda. E, finalmente, a variável do contador $c incrementa +1.

Edit: Se você quiser que apenas diretórios usem este diretório ( */ machtes only, o resto permanece o mesmo):

c=132
for d in */ ; do
  mv -v "$d" "enum-$(printf '%0*d' 5 $c)"
  c=$(($c+1))
done
    
por 25.08.2015 / 19:55