[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