[EMAIL PROTECTED] wrote: > ... > la pregunta en verdad es esta: > > quiero hacer un script que me cambie los nombres de estos > ficheros/directorios > que contienen espacios en blanco... > > hago esto que funciona... > > IFS="" ; for i in `ls -R` ; do q=`echo $i | sed s/' '/_/g` ; echo $i > ; done > ... No te creo :) el nombre de un archivo con blancos que resulta de ls -R es interpretado dentro de la lista del for como varios elementos de la lista. Distinto sería si haces un
for i in * ó for i in */* en tal caso cada archivo es un elemento de la lista del for y hay alguna chance de que la cosa funcione. Para conseguir hacer la operación en un árbol de directorios lo único que se me ocurre es hacer un find: find . -name '*' -exec ./reno \{\} \; donde ./reno es un pequeño script: #! /bin/bash q=$(echo $1 | sed s/' '/_/g) mv "$1" $q Esto funciona +o-: -Se queja de que estás tratando de renombrar de un archivo al mismo (en los casos en que no tienen espacio en el nombre). -Si un directorio tiene un espacio en el nombre primero lo renombra y luego intenta renombrar los archivos que contiene. Y como el directorio esta cambiado ya no encuentra los archivos con el viejo nombre. Se arregla ejecutando de nuevo el comando. Intenté hacerlo todo en una línea pero no me salió: no conseguí que cada caracter especial sea interpretado por quien corresponde: { } y ; por find, algunas comillas por bash, el | por no se quién... -- Saludos, O__ Enzo. ,>/ ____________________________________________________()_\()____ Enzo A. Dari | Instituto Balseiro / Centro Atomico Bariloche 8400-S. C. de Bariloche, Argentina | [EMAIL PROTECTED] Phone: 54-2944-445208, 54-2944-445100 Fax: 54-2944-445299 Web page: http://cabmec1.cnea.gov.ar/darie/darie.htm