Estoy tratando de buscar archivos usando findy poner esos archivos en una matriz Bash para poder hacer otras operaciones en ellos (por ejemplo, lso grepellos). Pero no puedo entender por qué readarrayno está leyendo el findresultado, ya que está conectado a él.
Digamos que tengo dos archivos en el directorio actual file1.txty file2.txt. Entonces la findsalida es la siguiente:
$ find . -name "file*"
./file1.txt
./file2.txt
Así que quiero canalizar eso en una matriz cuyos dos elementos son las cadenas "./file1.txt"y "./file2.txt"(sin comillas, obviamente).
He intentado esto, entre algunas otras cosas:
$ declare -a FILES
$ find . -name "file*" | readarray FILES
$ echo "${FILES[@]}"; echo "${#FILES[@]}"
0
Como puede ver en la echosalida, mi matriz está vacía.
Entonces, ¿qué estoy haciendo mal aquí exactamente? ¿Por qué readarrayno está leyendo findla salida como entrada estándar y colocando esas cadenas en la matriz?

readarray -d '' < <(find your_args -print0)La solución correcta es:
Eso es similar a lo que Greg's BashFAQ 020 explica en detalle y esta respuesta cubre .
No tiene ningún problema con archivos con nombres impares (que no contienen NUL en el nombre), con espacios o líneas nuevas. Y el resultado se establece en una matriz, lo que lo hace útil para su posterior procesamiento.
fuente
readarraytambién puede leer de stdinfuente
find -print0para proteger contra nombres de archivo "inesperados".