Come posso fare in modo che rsync cancelli i file che sono stati cancellati dalla cartella sorgente?

140

Recentemente ho installato una macchina con Ubuntu Server per ospitare i server di gioco. Ho installato un plug-in di backup per ogni server di gioco che crea frequenti backup dei file del mondo di gioco in una particolare cartella sulla macchina. Inoltre, ho stabilito un'attività cron per copiare automaticamente tali backup nella mia cartella Dropbox ogni notte utilizzando rsync con l'opzione -a .

Dopo alcuni mesi il mio account Dropbox ha raggiunto il limite di archiviazione e ho capito che non sarei riuscito a conservare così tanti backup, quindi ho configurato il plug-in di backup del server di gioco per non conservare così tanti backup, quindi ho aspettato qualche giorno per vedere se eliminasse i backup più vecchi come è pianificato per fare su base settimanale. Il plug-in di backup ha fatto il suo lavoro e ha cancellato i backup più vecchi, quindi mi aspettavo che l'attività cron di rsync cancellasse successivamente i vecchi backup dalla mia cartella Dropbox in modo che corrispondessero alla cartella di origine, ma non lo ha fatto. Quindi ho un paio di domande:

  • Per impostazione predefinita, fa rsync solo i file aggiungi alla cartella di destinazione che sono stati aggiunti alla cartella sorgente e cambia file sono stati modificati nella cartella sorgente ma NON vengono eliminati che sono stati cancellati dalla cartella sorgente?

  • In tal caso, qual è il modo migliore per fare in modo che% co_de lo faccia? io vuoi che la cartella di destinazione rifletta perfettamente la cartella sorgente, e ciò significa eliminare tutti i file che sono stati cancellati dalla fonte cartella.

Vedo alcune opzioni elencate nella pagina di manuale per rsync che potrebbero fare il trucco, ma poiché non ho familiarità con.

    
posta user254251 03.06.2014 - 05:53

3 risposte

163

Per eliminare i file nella destinazione, aggiungi l'opzione --delete al tuo comando. Ad esempio:

rsync -avh source/ dest/ --delete
    
risposta data GarethD 26.08.2015 - 09:14
35

Il comando rsync non cancella alcun file mentre usi alcune delle sue opzioni delete in quel comando. Pertanto, se un file o una cartella sono aggiunti in origine, verranno sincronizzati con il targeting senza alcuna eliminazione.

Ti suggerisco di utilizzare rsync per eseguire il backup dai file di origine e utilizzare find ... rm per i file di eliminazione per il periodo di tempo o la dimensione dei file:

rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;

Il suddetto blocco di codice, crea un backup dall'origine e poi cancella tutti i file che hanno una durata superiore a 2 mesi.

Aggiorna

Poiché trovo che le opzioni delete siano solo per TARGET che se alcuni file vengono rimossi dall'origine, rsync --delete li rimuove da TARGET. E l'opzione delete di after e before , come menzionato nella sua pagina man:

--delete-before         receiver deletes before transfer, not during

Significa che:

  1. rsync elimina il file da TARGET che viene rimosso da SOURCE.
  2. rsync avvia la sincronizzazione dei file.

--delete-after receiver deletes after transfer, not during

Significa che:

  1. rsync avvia la sincronizzazione dei file.
  2. rsync elimina il file da TARGET che viene rimosso da SOURCE dopo la sincronizzazione.

NOTA : il --delete-{before/after} implementa solo in TARGET.

    
risposta data shgnInc 03.06.2014 - 06:13
5

Questo comando copia i dati di incremento e lo mantiene sincronizzato con il server remoto.

  1. Copierà solo i dati incrementali.
  2. Eliminerà eventuali dati cancellati dalla fonte.
  3. Copierà di nuovo dalla fonte se qualsiasi dato cancellato a destinazione.
  4. fondamentalmente questo comando manterrà sincronizzati entrambi gli ambienti.

rsync -avWe ssh --delete-before (source) [email protected]:(destination) rsync -avW --delete-before -e ssh (source) [email protected]:(destination)

Esempio:

rsync -avWe ssh --delete-before /data [email protected]:/backup
rsync -avW --delete-before -e ssh /data [email protected]:/backup
    
risposta data Ganesh Ghube 29.07.2015 - 14:12

Leggi altre domande sui tag