El uso find . -print0
parece ser la única forma segura de obtener una lista de archivos en bash debido a la posibilidad de que los nombres de archivo contengan espacios, nuevas líneas, comillas, etc.
Sin embargo, estoy teniendo dificultades para hacer que la salida de find sea útil dentro de bash o con otras utilidades de línea de comando. La única forma en que he logrado hacer uso de la salida es canalizándola a perl y cambiando el IFS de perl a nulo:
find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
Este ejemplo imprime la cantidad de archivos encontrados, evitando el peligro de que las nuevas líneas en los nombres de archivo corrompan el recuento, como ocurriría con:
find . | wc -l
Como la mayoría de los programas de línea de comando no admiten la entrada delimitada por nulos, me imagino que lo mejor sería capturar la salida de find . -print0
en una matriz bash, como he hecho en el fragmento de Perl anterior, y luego continuar con la tarea, sea lo que sea. ser.
¿Cómo puedo hacer esto?
Esto no funciona:
find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
Una pregunta mucho más general podría ser: ¿Cómo puedo hacer cosas útiles con listas de archivos en bash?