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
pormv
se estiver satisfeito
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.
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. echo
por mv
se estiver satisfeito 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
Tags shell-script