Como reformatar os nomes dos diretórios?

0

Eu tenho muitos diretórios com os seguintes nomes: geom1 geom10 geom11 geom12 geom13 geom14 geom15 geom16 geom17 geom18 geom19 geom2 geom20 geom3 geom4 geom5 geom6 geom7 geom8 geom9

Eu gostaria de renomeá-los para serem assim

geom0000001 geom0000002 geom0000003 geom0000004 geom0000005 geom0000006 geom0000007 geom0000008 geom0000009 geom0000010 geom0000011 geom0000012 geom0000013 geom0000014 geom0000015 geom0000016 geom0000017 geom0000018 geom0000019 geom0000020

Eu usei o seguinte script

a=1 for  
i in geom*/; do
          new=$(printf "geom%07d" "$a") 
            mv -- "$i" "$new"
              let a=a+1
      done

o problema, ele passa para os exemplos geom10 a geom0000002 não para geom0000002 enquanto geom2 para geom0000012 não para geom0000002

o que eu quero é renomear os diretórios com a mesma seqüência, mas com o novo formato.

    
por Mohsen El-Tahawy 17.11.2016 / 10:54

2 respostas

6

tente

for i in geom*
do
      new=$(printf "geom%07d" "${i##geom}") 
      echo  "$i" "$new"
 done

onde

  • ##geom construct irá remover o geom da var.
  • substitua echo por mv se estiver satisfeito
por 17.11.2016 / 11:56
3

Esta não é uma solução recomendada, mas funciona. Eu sugiro que você use apenas no caso específico acima mencionado. Não é recomendado fazer um loop por ls dos resultados. Se você tiver outros nomes de pastas ou quiser usá-los em uma situação mais geral, deverá encontrar outra solução.

for i in geom*; do 
  nr=$(echo $i | cut -d'm' -f2); 
  #printf "geom%07d" "$nr"; 
  mv "${i}" "$(printf "geom%07d" "$nr")"
done
    
por 17.11.2016 / 11:51