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 '.', find devolverá 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

Entradas relacionadas


Published

Category

dev

Tags

Contacto