Si queremos recorrer un directorio y hacer algo con cada fichero o subdirectorio contenido en él, podemos ejecutar algo como:
$ for f in *; do
echo "$f";
done
En lugar de utilizar un for, también podríamos usar el comando find
con el parámetro exec:
$ find . -maxdepth 1 \( -name '*' ! -name '.' \) -exec echo {} \;
O en lugar del exec con un while:
$ find . -maxdepth 1 \( -name '*' ! -name '.' \) | while read f; do
echo "$f";
done
Un par de cosas:
- es importante que el asterisco esté entre comillas simples,
'*', o escaparlo con una barra invertida,\*, para que Bash no lo expanda, - utilizar comillas dobles cuando usamos la variable,
"$f", para que al expandirla, se trate el nombre entero incluyendo los espacios, y - mediante
-name '*' ! -name '.',finddevolverá todos los ficheros y directorios menos el directorio especial..
También podríamos usar el comando ls con el argumento -b, que escapa
los espacios:
$ ls -b * | while read f; do
echo "$f";
done