copiar directorios 2(script incluido)

Jon Bengoetxea jon en dunsoft.com
Mie Oct 16 10:00:12 CEST 2002


Hola a tod en s.
Me explico mejor....y de paso os paso el script.

Me pasa una cosa curiosa, cuando creo una lista del contenido del disco
de un servidor NT remoto:

disco_servidor=['Archivos de programa','WINNT',.......]

y lo meto en un bucle que me copia dichos directorios y ficheros a un
disco local, me intenta copiar por ejemplo el primer elemento de la
lista de esta forma:

copydir Archivos
copydir de
copydir programa

cuando lo valido seria  

copydir Archivos de programa

Logicamente me salta un error que me indica que no existen dichos
directorios.

El comando copydir de linux(del paquete mirrordir) lo declaro en una variable.
cmd_copia='copydir '

y luego lo lanzo en el bucle de copia con os.system()

for copia in lista_dir:
	os.system('%s -v /mnt/%s %s'%(cmd_copia,copia,destino_dir[dia_seleccionado]))
Este bucle me copia el contenido del disco remoto en un disco local en el dia que corresponde.	

Sabe alguien porque me hace esto??

Gracias, bye

Aqui teneis el script para los curiosos y para los supernovatos como yo, e incluso puede que a alguien le sirva, tener en cuenta que me falla lo indicado mas arriva. 

Espero sugerencias:

#!/usr/bin/env python2.2

#Script que permite crear una copia de seguridad de tu sistema local o remoto#
#-------------------------->metax 2002 Zybertxapel<----------------------------------#
#Este script solo se puede ejecutar como root y depende de mirrordir y samba(si quieres hacer copias remotas de NT/2000)
#La forma de ejecutarlo es ---- muback <numero que corresponde al dia > o sea si ponemos muback 0, nos copiara lo que este montado en /mnt en el directorio 
#/COPIAS/LUNES, si ponemos muback 2 copiaremos en /COPIAS/MARTES................... . . . . . . . . . . . . .  .  .  .  .  .   .   .   .   .   .   .        .         .            .      
#Podemos lanzar muback manualmente o poniendolo en el cron.

#importamos algunos modulos.
import sys, os, commands

if len(sys.argv) <> 2:
	print '\nDebes introducir el argumento de forma correcta\n\nmuba --help, muba -h\n\n'
	sys.exit()

# Imprime la ayuda.....
try:
	if (sys.argv[1] == '--help') or (sys.argv[1] == '-h'):
		print '\nUso: muback <numero correspondiente dia de la semana>'
		print '\nCon muback podras crear copias de seguridad locales o remotas'
		print '\n0 --> Lunes\n1 --> Martes\n2 --> Miercoles\n3 --> Jueves\n4 --> Viernes\n5 --> Sabado\n6 --> Domingo\n' 
		sys.exit()
	elif (sys.argv[1] == '--version') or (sys.argv[1] == '-v'):
		print '\nmuback version 0.1 Zybertxapel(2002)'
		print '\n14 Octubre  19:40:35 2002\n'
		sys.exit()
except IndexError:
	pass
#Definimos comandos y variables
montar='smbmount //servidor/discoC /mnt -o username=administrador,password=hola'

#El directorio COPIAS esta montado en una particion local y con los directorios de los dias de la semana
destino_dir=['/COPIAS/LUNES','/COPIAS/MARTES','/COPIAS/MIERCOLES','/COPIAS/JUEVES','/COPIAS/VIERNES','/COPIAS/SABADO','/COPIAS/DOMINGO']

#Si quieres hacer copias de tus datos  en local seria por ejemplo--->montar='mount /dev/sdb1 /COPIAS'
desmontar='umount /mnt'

#Variable comando copia(mirar mirrordir)
cmd_copia='copydir '

#Montar
os.system(montar)

#Creamos una lista del contenido de la raiz del disco remoto
lista_dir=os.listdir('/mnt')

#Lista de los directorios y ficheros que no quiero que me copie
no_copy=['pagefile.sys','RECYCLER','TEMP','WINNT','System Volume Information']

#Depuramos la lista quitando los directorios que no quiero que me copie y creando una lista final.
for depurado in no_copy:#Excluimos los directorios o ficheros de la lista final.
	lista_dir.remove(depurado)

# Identificamos el dia segun el argumento que le pasemos a 'muba' y creamos las variables de destino(lunes,martes,etc....)
num_elemen_dest=len(destino_dir)
for dia_lista in range(num_elemen_dest):
	if (sys.argv[1] >= '7'):
		print "\n0 --> Lunes\n1 --> Martes\n2 --> Miercoles\n3 --> Jueves\n4 --> Viernes\n5 --> Sabado\n6 --> Domingo\nmuba --help o muba -h para la ayuda\n"
		sys.exit()
	if (sys.argv[1] == '%d'%dia_lista):
		dia_seleccionado=dia_lista
	break

#Bucle de copia 
for copia in lista_dir:
	os.system('%s -v /mnt/%s %s'%(cmd_copia,copia,destino_dir[dia_seleccionado]))
	print "Copiando %s en %s" %(copia,destino_dir[dia_seleccionado])
#Desmontar
os.system(desmontar)






Más información sobre la lista de distribución Python-es