Renombrar Arbol de directorio

Guillermo O. Burastero gnulinux en bvconline.com.ar
Mie Mayo 19 11:20:29 CLT 2004


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: gnulinux en bvconline.com.ar






Más información sobre la lista de distribución Linux