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...)