Can Rsync può essere configurato per verificare il contenuto del file prima di essere sincronizzato. Ho sentito parlare del checksum, ma sono venuto a sapere che il checksum fa solo un campionamento. Voglio trasferire un file solo se è cambiato il contenuto e non il timestamp, c'è un modo per farlo con una qualsiasi delle modalità rsync. Nel mio scenario, supponiamo che il file sample.text verrà creato ogni settimana e desidero sincronizzarlo con un server remoto solo se i contenuti di sample.text vengono modificati, poiché viene creato ogni settimana, il timestamp ovviamente cambierà. Ma voglio il trasferimento solo su una modifica del contenuto.Can rsync verifica i contenuti prima di sincronizzare
risposta
Sì, dovresti leggere il manuale.
$ man rsync | grep "\--checksum"
-c, --checksum skip based on checksum, not mod-time & size
Rsync è piuttosto complicato. Raccomando di coccolare il tempo con la pagina man e la sperimentazione con i dati del test prima di usarlo per qualcosa di remoto importante.
Nella maggior parte dei casi, le persone utilizzano rsync -ac source dest
.
$ man rsync | grep "\--archive"
-a, --archive archive mode; same as -rlptgoD (no -H)
E questo -rlptgoD
spazzatura significa: recursive
, copy symlinks as symlinks
, preserve permissions
, preserve times
, preserve group
, preserve owner
, preserve device files (super-user only)
, preserve special files
, e skip based on checksum, not mod-time & size
Il -c
o --checksum
è davvero quello che stai cercando, e la vostra supposizione che campiona solo mtime e la dimensione è sbagliata.
+ per _cuddle time con la pagina man e sperimentazione con dati di test_ - Ottimo consiglio –
Vedere l'opzione --checksum
nella pagina man rsync.
Inoltre, l'opzione --size-only
sarà una scelta più rapida se si è sicuri che un cambiamento di contenuto comporta anche un cambiamento di dimensioni.
Esempio:
#!/bin/bash
echo > diff.txt
rsync -rvcn --delete /source/ /destination/ > diff.txt
second_row=$(sed -n '2p' diff.txt)
if [ "$second_row" = "" ]; then
echo there was no change
else
echo there was change
fi
Dovresti davvero aggiungere qualche spiegazione sul perché questo codice dovrebbe funzionare - puoi anche aggiungere commenti nel codice stesso - nella sua forma attuale, lo fa non fornire alcuna spiegazione che possa aiutare il resto della comunità a capire cosa hai fatto per risolvere/rispondere alla domanda. – ishmaelMakitla
Se non ci sono stati cambiamenti, la seconda riga di diff.txt in modalità dettagliata di rsync è vuota, sed esamina questa seconda riga. – oldbowman
- 1. rsync
- 2. Cosa significano i numeri nell'output di rsync?
- 3. meteora - Sincronizzare più query asincrone prima di tornare?
- 4. Verifica dell'elemento nell'elenco generico prima di utilizzarlo
- 5. Verifica dell'autorizzazione prima di utilizzare UIImagePickerController
- 6. Gradle non riesce a sincronizzare anche alla prima esecuzione
- 7. Sincronizzare i dispositivi Android tramite l'ora GPS?
- 8. Seleziona tutti i contenuti di un div
- 9. File.OpenWrite aggiunge invece di cancellare i contenuti?
- 10. Impedire rsync di cancellare i file di destinazione che corrispondono a un determinato modello
- 11. problema Dialog: requestFeature() deve essere chiamato prima di aggiungere contenuti
- 12. Se l'inizializzazione di constexpr si verifica prima di un'altra inizializzazione
- 13. Come sincronizzare i dati tra diversi dispositivi
- 14. Uso degli agenti per sincronizzare i lavori
- 15. generazione di contenuti CSS prima o dopo gli elementi 'input'
- 16. Jquery: come cancellare un elemento prima di aggiungere nuovi contenuti?
- 17. requestFeature() deve essere chiamato prima di aggiungere contenuti
- 18. requestFeature() deve essere chiamato prima di aggiungere contenuti in Frammento
- 19. Activeadmin can can errore di autorizzazione
- 20. Perché rsync utilizza mkdir senza l'opzione p
- 21. Monitoraggio dei progressi di Rsync
- 22. Controllo di rsync con Python?
- 23. rsync attraverso tunnel ssh
- 24. Rsync su SSH - timeout in ssh o rsync?
- 25. Python - Can (o should) I change os.path.sep?
- 26. Usare rsync per eliminare un singolo file
- 27. Verifica valori enum validi prima di utilizzare enum
- 28. Come rimuovere i contenuti duplicati?
- 29. I contenuti iframe cambiano evento?
- 30. Rsync: implementazione pura di Ruby?
Hai provato la pagina di manuale di rsync? -c, --checksum Questo cambia il modo in cui rsync controlla se i file sono stati modificati e hanno bisogno di un trasferimento. Senza questa opzione, rsync usa un "controllo rapido" che (per impostazione predefinita) controlla se le dimensioni e il tempo dell'ultima modifica di ciascun file corrispondono tra il mittente e il destinatario. –