así que estoy intentando seleccionar una variedad de archivos usando un script interactivo.
El objetivo final es utilizar el read
comando, pero para demostración aquí asigné la glob
variable manualmente
#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob
# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}
# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg
El error es el siguiente:
Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory
Entonces, ¿qué me falta aquí al asignar la glob
variable o al agregarla glob
a mi ruta?
Solución:
Encontré una solución pero no estoy muy seguro de por qué, pero
bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob}
EOF
me dará el resultado deseado.
Respuesta1
Puede utilizar una asignación de matriz en lugar de solo una variable.
shopt -s nullglob ##: just in case there is non match for the glob.
glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.
/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
Eso debería funcionar para su código de muestra.
El problema vendrá cuando decidas reemplazar los números dentro de la expansión de llaves con una variable mencionada por @kusalananda, sobre la secuencia de expansión.
Agregue la
failglob
opción Shell si desea ver un error y salga con un valor distinto de cero si no hay ningún patrón coincidente.