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