09/12/2010, 12:24
|
| | Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 11 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, |