Bash 3.2.57 expansión de llaves {01..09}

Bash 3.2.57 expansión de llaves {01..09}

Tengo un pequeño problema, no puedo usar bash v.4. Sigo usando bash 3.2.57. Estoy ingresando mi secuencia de comandos de esta forma logs_logs_2017-04-{02..06}.tar.bz2, pero como bash 3.2.57 no admite la expansión de llaves con ceros a la izquierda, la secuencia de comandos se alimenta con lo siguiente logs_logs_2017-04-2.tar.bz2 logs_logs_2017-04-3.tar.bz2 .....y estos nombres de archivos no existen.

Alguna idea ?

Gracias !

Respuesta1

Da la vuelta al cero inicial:

somecmd logs-0{2..9}.tar.bz2  logs-{10..15}.tar.bz2

(Lo 02..06del ejemplo es trivial de manejar de esta manera).

O usar printf:

somecmd $(printf "logs-%02d.tar.gz " {2..15})

Esto se basa en la división de palabras y funciona solo siempre que el nombre del archivo no tenga caracteres globales ni espacios en blanco.

Bien hecho, esto sería sencillo, pero un poco largo:

files=()
for x in {2..15} ; do
    files+=( "$(printf "logs-%02d.tar.gz" $x)" )
done
somecmd "${files[@]}"

información relacionada