Muchas gracias por vuestras respuestas. La solución de Carlos Lorenzo está
muy bien y la de Victor Hugo, funciona también estupendamente. Cualquiera de
ellas me ha valido. Pero, después de una tarde completa trabajando con los
ficheros, voy a estudiar detenidamente el script de Victor para entenderlo y
ver cómo el autor del mismo lo solucionó.
Muchas gracias, de nuevo, a ambos.
Un abrazo,
E Garrido
El día 29/03/06, Comventia Express
Hola a todos,
Tengo un problema que me ha llevado toda la tarde y no consigo verlo. Es probable que sea una g...llez y que no lo vea por el cansancio. Antes de apagar el ordenador os lo dejo en la lista por si a alguien se le enciende la luz.
Tengo un directorio con ficheros provenientes de windows que tienen espacios en el nombre. Mi intención es cambiar cada espacio por un guión bajo. Por ejemplo, Fichero 1.txt cambiarlo a Fichero_1.txt. Tengo del orden de 200 ficheros que responden al patron Fichero n.txt.
He investigado un poco por ahí y he decidido quedarme con tr. Diseñé el script:
----------------------------- #!bin/bash
SOURCE_DIR="/home/zutanito/Desktop/prueba" clear mkdir $SOURCE_DIR cd $SOURCE_DIR
for i in *txt ; do j=`echo $i | tr ' ' '_'` ; echo $i; echo $j; cp $i $j ; done -----------------------------
La salida de la consola es:
----------------------------- list corp dir 1.txt list_corp_dir_1.txt cp: target «list_corp_dir_1.txt» is not a directory -----------------------------
como se puede ver, las variables $i y $j son interpretadas perfectamente, pero en el cp $i $j; falla todo.
No entiendo porqué en la consola puedo hacer manualmente cp list\ corp\ dir\ 1.txt list_corp_dir_1.txt y funciona perfectamente mientras que en el script no es posible.
En la desesperación intenté en la consola
find /home/zutanito/prueba/ -name "*txt" -exec echo {} | tr ' ' '_' {} \ ;
pero ni en broma ya que supongo habrá algo más de sintaxis en la línea.
Gracias a todos y un abrazo, E Garrido