Newsgroup: it.comp.os.win.windows10
Titolo: Copia e sincronia

Conoscete altri programmi come questo per la sincronia e il backup, con 
tanto di versioni e pulizia di quelle vecchie?
 
https://beanland.net.au/autover/
 
 
In pratica devo copiare dei file da una cartella quando sono copiati o 
modificati, salvarne due o tre versioni, e dopo 3-4 mesi cancellare le 
versioni. Autover e' gratuito e funziona, in certi casi pero' mi da 
problemi.
 
Thx



Ma... perchè non usi semplicemente un backup incrementale ?
 

 Ma... perchè non usi semplicemente un backup incrementale ?
 
Beh, questo lo metti in avvio automatico e poi te ne dimentichi...

 Beh, questo lo metti in avvio automatico e poi te ne dimentichi...
 
Lo fai anche con il backup !
 
Scheduli un backup "full" il lunedì, poi vai di incrementale sino a
domenica, il lunedì successivo parte un altro backup "full" e così via,
poi usi un banale job schedulato per eliminare i files dei vecchi
"full" e relativi "incrementali", non è che ci voglia poi molto
 
 
 
 



Tra l'altro... se non hai problemi di spazio, invece di usare il backup
incrementale, potresti usare il differenziale, quest'ultimo salva tutti
i files nuovi o modificati dall'ultimo backup completo, per cui i files
di backup tendono a crescere di più rispetto a quelli dell'incrementale
in compenso, nel caso di ripristino, basta ripristinare l'ultimo backup
completo e l'ultimo differenziale o comunque quello relativo alla data
alla quale si desidera ripristinare la situazione
 
 

 Lo fai anche con il backup !
 
Autover segue le notifiche del sistema operativo, ovvero copia i file 
immediatamente dopo che sono stati modificati nelle cartelle che 
monitora. Sarebbe una cosa abbastanza importante, questa, perche' di 
media i salvataggi avvengono 3-4 volte al giorno.
Una cosa simile potrei farla usando uno script Python, pero' un po' di 
tempo a farlo e controllarlo ci vuole.
 

 di tempo a farlo e controllarlo ci vuole.
 
Beh, in C, C++ o C# sarebbe anche più facile, basta usare queste API
 
https://learn.microsoft.com/en-us/windows/win32/fileio/obtaining-directory-change-notifications
 
 
https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-readdirectorychangesw
 
 
per ricevere una callback ogni volta che viene cambiato qualcosa
nell'albero di cartelle monitorato, a quel punto il resto diventa
banale, basta inserire le info in una coda FIFO e poi avere un altro
thread che estrae le info dalla coda e procede con le operazioni che si
desidera effettuare in risposta, niente di che
 
 

 
https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-readdirectorychangesw
 
 
qui trovi un esempio estremamente semplificato
 
https://gist.github.com/nickav/a57009d4fcc3b527ed0f5c9cf30618f8
 
 
nel codice "reale" sarà necessario utilizzare almeno una coppia di
thread, uno per il monitoraggio e la ricezione degli eventi ed un
secondo per la gestione delle azioni relative agli eventi ricevuti, in
pratica, il primo thread inserirà le info sull'evento in una coda FIFO
proseguendo poi con il monitoraggio, il secondo thread controllerà se
vi siano elementi nella coda ed in tal caso, li estrarrà uno alla volta
procedendo poi ad elaborare il tutto come desiderato, di nuovo, nulla
di particolare
 
ciao
 

 qui trovi un esempio estremamente semplificato
 
Si' giusto, comunque penso che magari usero' Python, che una volta ho 
fatto una cosa simile per un NAS (ovvero, arrivavano, non tutte assieme, 
dei file di immagini da una macchina utensile, e il NAS si ingolfava 
quando c'erano i picchi) e poi lo trasferii su di un pc con Windows
 
https://is.gd/iBrgAh
 
 
Con Linux e' leggermente piu' semplice, con Windows occorre(va) cambiare 
la riga dove c'e' inotifywait, usando win32file.ReadDirectoryChangesW()

 Si' giusto, comunque penso che magari usero' Python
 
Beh, se ti senti a tuo agio con il multithreading in Python, usa
quello, tutto sommato ha già un oggetto che permette di gestire una
coda di tipo thread safe 
https://superfastpython.com/thread-queue/
 per
cui i blocchi di base li hai, io sinceramente mi trovo più a mio agio
con C/C++ o C# quando devo scrivere codice in windows
 
 
 

 con C/C++ o C# quando devo scrivere codice in windows
 
A proposito di C#, dai un'occhiata qui
 
https://github.com/TechieGuy12/FileWatcher
 
 
il programma sembra fare (quasi) esattamente quello che ti serve
 

 (quasi) esattamente quello che ti serve
 
Mi puo' essere utile, da quel che vedo sembra potere eseguire un comando 
sul quel file, e in questo caso avrei semplicemente da gestire casomai 
le versioni, ma e' un decimo del lavoro (non e' solo il copiare un file 
da codificare, ma anche quali escludere o includere). Grazie

 includere). Grazie
 
Non solo, può anche lanciare un programma (o script) esterno
passandogli nome, percorso del file e, volendo, il tipo di modifica che
lo stesso ha subito, per cui direi che potrebbe fare al tuo caso, per
il discorso esclusione/inclusione, il programma ha già dei filtri che
possono essere specificati nel file XML di configurazione
 
 
 
 

 Ma... perchè non usi semplicemente un backup incrementale ?
 
Perché, ad esempio, non vuole un backup incrementale, ma sincronizzare una
directory su più pc. Io ad esempio lo faccio per il mio profilo, con syncthing
(e synctrayzor) lo ho sincronizzato tra desktop e portatile e non devo
preoccuparmi di dover far copie a mano (senza contare che posso attivare il
versionamento e quindi evitare che vengano cancellati file a casaccio)
 
Enrico

 con C/C++ o C# quando devo scrivere codice in windows
 
Python e C/C++/C# Sono a livelli differenti, con curve di apprendimento
differenti. Suggerirli come alternative non è proprio la stessa cosa
 
Enrico

 versioni.
 
Syncthing fa quello che vuoi. Se sei su Windows, Synctrayzor è quello che
cerchi
 
Enrico

 che cerchi
 
Ecco, a questo, pur avendolo usato, non avevo proprio pensato :-)

 la stessa cosa
 
Io ho scritto di trovarmi a "più a mio agio", non altro; per favore non
"mettermi in bocca" cose che non ho detto (scritto)