[Python] Muovere cartelle
Sandro Dentella
sandro a e-den.it
Dom 28 Gen 2007 13:06:46 CET
Ciao Pietro!
mi pare che il problema che poni è facile o difficle a seconda di alcune
informazioni cui in parte hai accennato:
* atomicità della operazione.
> Non lo dico (solo) per un problema di eleganza, ma anche per un problema
> di consistenza (per un tot di tempo la cartella, che contiene un albero
> piuttosto complesso, sarà inesistente, e questo mi scoccia): so bene che
> né rmtree né shutil né qualsiasi altra funzione che possiate
supponi che la tua cartella sia "dir", qui si risolverebbe copiando in una
cartella dir.new e poi rinominando dir in dir.old, e dir.new in
dir. L'operazione non è "atomica" sel senso dei db ma è quanto più vicino
si possa immaginare. Poi con calma ti cancelli dir.old
Questo però non fa i conti con il contenuto della cartella: cambia durante
la copia al punto da dovere ipotizzare che alla fine del processo di copia
dir.new sia "non aggiornata" perché nel frattempo hai scritto dati nuovi
in dir? questo lo sai tu solo.
* semplicità/eleganza
hai bisogno di portabilità? devi usarla in linux o windows? qualcuno
potrebbe pensare poco eleganti soluzioni non portabili, ma se non serve la
portabilità i comandi linux di sistema 'rm -Rf'e 'cp -u' possono risolvere
molti problemi. In questo caso attento: cp -u è rapido perché non riscrive
file che non siano cambiati ma non cancella file che non servono più (così
come tar). A seconda del tipo di file/dati che hai dei file in più sono
dannosi o assolutamente ininfluenti. Ancora una volta lo sai solo tu.
* rsync
come ti han già detto è una ottima soluzione. Risolve tutti i probelmi
eccetto la atomicità, ha una opzione che cancella i file che siano
presenti nella cartella di destinazione ma non in quella di partenza. E' in
generale molto efficente e si usa per sincronizzare interi filesystem. Se
la combini con la rinomina della cartella diventa anche quella quasi
atomica, ma perdi il vantaggio rispetto a 'cp -a' ... %-(
Se vuoi saperne di più, dicci qualcosa di più sulle esigenze della tua
copia...
ciao
*;-)
--
Sandro Dentella *:-)
http://www.tksql.org TkSQL Home page - My GPL work
Maggiori informazioni sulla lista
Python