Responder al comentario

Oct 09 05:14

Bucles "for" en bash con ficheros con espacios

Supongo que muchos conoceréis este truquillo, pero a mi me costó lo suyo encontrarlo en su momento...

¿Alguna vez habéis hecho un bucle "for" en bash para recorrer una serie de ficheros y realizar tareas sobre ellos? Si es así, cuando los nombres de ficheros contienen espacios, "for" parte el nombre del fichero en varios trozos:

luis@endymion:~/pruebas$ ls
fichero con espacios 1  fichero con espacios 2  fichero-sinespacios1  fichero-sinespacios2
luis@endymion:~/pruebas$ for i in $(ls *); do echo $i; done
fichero
con
espacios
1
fichero
con
espacios
2
fichero-sinespacios1
fichero-sinespacios2
luis@endymion:~/pruebas$

Para ajustar qué carácter es usado por bash como delimitador de campos, exista la variable IFS. Por defecto, considera un delimitador al salto de línea, retorno de carro, espacio y tabulado. Si lo ajustamos quitando el espacio y el tabulado, eliminamos el problema con los nombres de fichero:

luis@endymion:~/pruebas$ ls
fichero con espacios 1  fichero con espacios 2  fichero-sinespacios1  fichero-sinespacios2
luis@endymion:~/pruebas$ IFS=$'\x0A'$'\x0D'; for i in $(ls *); do echo $i; done
fichero con espacios 1
fichero con espacios 2
fichero-sinespacios1
fichero-sinespacios2
luis@endymion:~/pruebas$

Espero que a alguien le sirva de ayuda! (Como todo el mundo me diga que ya lo sabía, me hundís en la miseria...)

Responder

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><img>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.