Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/12/2010, 12:24
bypper
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 4 meses
Puntos: 0
Script renombrado masivo

Buenas:

Estoy confeccionando un script en Python cuyo objetivo es recorrer el árbol a partir de una ruta concreta y renombrar todos los ficheros y directorios en Mayusculas a minusculas y los espacios que puedan tener los nombres en "_".

El script realiza su cometido correctamente, pero como es lógico si encuentra un directorio que cumple alguno de los requisitos y este es renombrado, pues claro, no puede procesar lo que se encuentra por debajo, y no finaliza el proceso.

Pongamos una estructura como esta:

prueba1
|-- A
| |-- b b
| | |-- JJJ
| | |-- JODER
| | `-- c
| | `-- mierda en bote
| |-- ddd
| | |-- 1
| | |-- 2
| | |-- 3
| | `-- 4
| `-- mier
`-- todo

5 directories, 8 files

En el momento en que renombra el directorio "A" a "a", se detiene la ejecución, al igual que cuando renombra el directorio "b b" a "b_b" pues no procesa los ficheros que cuelgan de el.

Esto provoca que haya que ejecutar el script una o varias veces, dependiendo de los que se encuentre.

¿Sabeis como poder esquivar esto, y que pueda procesar todo de una sola vez, o bien, retomar el proceso de alguna manera?

El script es este:

#!/usr/bin/python

# importamos los modulos...
import os, sys, string, logging, time
#########################
# V A R I A B L E S #
#########################
RUTAG='/home/alberto/prueba1'
LOG=sys.argv[0] + '.log'
DIAHORA = time.strftime("%y%m%d_%H%M",time.localtime())
#########################
# F U N C I O N E S #
#########################
def CHKMAYUS(MAYUS,RUTA):
"""funcion para comprobar si tiene mayusculas y renombrar si fuera
necesario"""
if MAYUS.isupper():
MAYUS2=string.lower(MAYUS)
# renombramos los que esten en mays
MSGMAYUS='renombramos ' + MAYUS + ' a ' + MAYUS2
os.rename(RUTA + '/' + MAYUS, RUTA + '/' + MAYUS2)
print MSGMAYUS
logging.info(MSGMAYUS)

def CHKESPACIO(ESPA,RUTA):
"""funcion para comprobar si tiene espacios y cambiarlos por '_'"""
if ESPA.count(' '):
ESPA2=ESPA.replace(' ','_')
# renombramos los espacios por '_'
MSGESPA='renombramos ' + ESPA + ' a ' + ESPA2
os.rename(RUTA + '/' + ESPA, RUTA + '/' + ESPA2)
print MSGESPA
logging.info(MSGESPA)

#########################
# P R I N C I P A L #
#########################
logging.basicConfig(filename=LOG,level=logging.DEB UG)
logging.info(DIAHORA)
logging.info("************************************ ******************************************")
logging.info("* Renombramos directorios/ficheros a minusculas y
cambiando espacios por '_' *")
logging.info("************************************ ******************************************")
try:
for base, dirs, files in os.walk(RUTAG):
print 'Procesando ' + base
# mostramos lista directorios... SI NO ESTA vacia
if dirs:
# repasamos la lista de directorios
for D in dirs:
# chequeamos los que esten en mays
CHKMAYUS(D,base)
# chequeamos que tengan espacios
CHKESPACIO(D,base)
# mostramos lista ficheros... SI NO ESTA vacia
if files:
# repasamos la lista de ficheros
for F in files:
# chequeamos los que esten en mays
CHKMAYUS(F,base)
# chequeamos que tengan espacios
CHKESPACIO(F,base)
finally:
print "Proceso finalizado correctamente"


Gracias, un saludo,