Solo quiero obtener todos los archivos en un determinado directorio en una matriz bash (suponiendo que ninguno de los archivos tenga una nueva línea en el nombre):
Entonces:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Resultado vacío!
Si hago la forma indirecta de usar un archivo, temporal o de otra manera:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
¡Resultado!
Pero, ¿por qué no mapfile
lee correctamente de una tubería?
find
y mapfile
aquí en absoluto y no simplemente myarr=(mysqldump*)
? Esto incluso funcionará con nombres de archivos con espacios y líneas nuevas.
nullglob
opción ( shopt -s nullglob
) para myarr=(mysqldump*)
no terminar con la matriz ('mysqldump*')
en caso de que no coincidan los archivos.