Germán Poó Caamaño wrote: >El mar, 18-05-2004 a las 22:11, +0200, Jhamil Mercado escribió: > > >>Tengo un arcbol de directorios (directorios, >>subdirectorios, archivos, etc) >> >>hecho en M$ los nombres de todo estan en mayusculas y >>con espacios, ademas son grandes de nombre. >> >>ahora necesito pasarlos a linux, como puedo renombrar >>todo el rabol de directorios de forma recursiva >>tambien los archivos a minusculas y reemplazar los >>espacios de los nombres por _ subyarado. >> >> > >for i in `find directorio` >do > target=`echo $i | tr A-Z a-z | sed 's/ /_/g'` > mv $i $target >done > > > Creo que el comando no funciona en general ya que si la lista devuelta por el find contiene directorios con blancos embebidos en el nombre (mala práctica en mi opinión) y salvo que se use "find -depth" se cambia primero el nombre del directorio, luego el nombre de un archivo originalmente en ese directorio $i no va a ser encontrado porque el nombre de algún directorio en su paso fue cambiado previamente. Sugiero primero cambiar todos los nombres de directorios buscándolos con "find -type d directorio" y luego recién hacer el cambio en los nombres de archivos no directorios. Esto tampoco andaría en general por ejemplo si hay en el paso al archivo más de un directorio con blancos.
Un solución más robusta aunque menos elegante sería por ejemplo (ojo que no la he probado). for a in `find -depth directorio` do paso=`dirname $a` nombre=`basename $a` nuevo=`echo $nombre | tr A-Z a-z | sed 's/ /_/g'` pasosuevo=$paso$nuevo mv $a $pasonuevo done -- Guillermo O. Burastero Linux Counter user 84879 (http://counter.li.org) Córdoba 171 - B8000IFC - Bahía Blanca Tel +54 (291) 454-6132 Prov. de Buenos Aires - Rep. Argentina ICQ 97148268 email: [EMAIL PROTECTED]