Su código no funciona en OS X o Linux.
for file in $(find . -name "*.txt")
do
ls -l "${file}"
done
En primer lugar, el shell realiza la expansión de la sustitución del comando $(find . -name "*.txt")
Los resultados se asemejan a los siguientes file with spaces\nanother file with spaces
y así sucesivamente. Ahora, el shell realiza word spitting
basado en el valor de IFS
- el separador de campo interno. El valor suele ser espacio en blanco, tabulador y nueva línea.
Ejecuta el siguiente código:
for file in $(find . -name "*.txt")
do
echo "${file}"
done
Ahora vamos a cambiar el IFS
a sólo el carácter de nueva línea.
IFS='
'
for file in $(find . -name "*.txt")
do
ls -l -- "${file}"
done
Tu código funcionará aunque te aconsejo que no cambies IFS
y encontrar soluciones alternativas.
Tanto GNU find como BSD find son muy robustos y pueden manejar nombres de archivos con espacios. Puede evitar el bucle y obtener resultados similares con una sola línea
find . -name "*.txt" -ls
0 votos
¿Puede utilizar
find . -name "*.txt" -exec ls -l {} \;
¿en su lugar?0 votos
No utilice un
for
bucle para procesarfind
resultados, utilicefind ... -exec ...
en su lugar (y, en casos más complejos, escribir un shell script para que se ejecute el código).