Jak vytvořím rsync odstranit soubory, které byly smazány ze zdrojové složky?

131

Nedávno jsem založil počítač s Ubuntu Serverem pro hostování herních serverů. Nainstaloval jsem záložní plugin pro každý herní server, který vytváří časté zálohování herních světových souborů v konkrétní složce na počítači. Také jsem vytvořil úlohucron, aby automaticky kopírovala tyto zálohy do složky Dropbox každou noc pomocí rsync s volbou-a.

Po několika měsících můj účet Dropbox dosáhl svého limitu pro ukládání a uvědomil jsem si, že nebudou schopni udržet tolik záloh, takže jsem nakonfiguroval zálohovací plugin pro herní server, abych si neponechal tolik záloh, pak jsem čekal pár dní pokud by odstranil starší zálohy, jak je plánováno na týdenní bázi. Zálohovací plugin nakonec provedl svou práci a odstranil starší zálohy, takže jsem očekával, že úloharsync cron následně odstraní starší zálohy z mé složky Dropbox tak, aby odpovídala zdrojové složce, ale to tak neučinila. Takže mám pár otázek:

  • Ve výchozím nastavení se souboryrsync přidat do cílové složky které byly přidány do zdrojové složky a soubory změnit byly změněny ve zdrojové složce, ale soubory NOT delete které byly odstraněny ze zdrojové složky?

  • Pokud tomu tak je, jaký je nejlepší způsob, jak to udělatrsync? I chcete cílovou složku dokonale odrážet zdrojovou složku, a to znamená odstranit všechny soubory, které byly ze zdroje odstraněny složky

Vidím některé možnosti uvedené v manuálové stránce prorsync, které by mohly dělat trik, ale protože nejsem obeznámen.

    
dané user254251 03.06.2014 05:53

3 odpovědi

151

Chcete-li odstranit soubory v cíli, přidejte do příkazu možnost--delete. Například:

rsync -avh source/ dest/ --delete
    
odpověděl GarethD 26.08.2015 09:14
32

Příkaz rsync neodstraní žádný soubor, pokud použijete některé z jeho možnostídelete v daném příkazu. Takže pokud bude nějaký soubor nebo složka přidán ve zdroji, bude synchronizován tak, aby cíloval bez jakéhokoli odstranění.

Navrhuji, abyste pro zálohování ze zdrojových souborů použilirsync pro použití souborůfind ... rm pro časové období nebo velikost souborů:

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

Výše ​​uvedený blok kódu, zálohování ze zdroje a odstranění všech souborů, které byly naposledy změněny, jsou delší než 2 měsíce.

UPDATE

Protože zjistím, že možnostidelete jsou pouze pro TARGET, že pokud jsou některé soubory odebrány ze zdroje,rsync --delete je odstraní z TARGETu. A volbadelete podleafter abefore, jak je uvedeno na stránce mana:

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

Znamená to, že:

  1. rsync odstranit soubor z TARGETu, který je odstraněn z SOURCE.
  2. rsync spusťte synchronizaci souborů.

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

Znamená to, že:

  1. rsync spusťte synchronizaci souborů.
  2. rsync odstraní soubor ze systému TARGET, který je po synchronizaci odstraněn ze zdroje SOURCE.

POZNÁMKA : implementace--delete-{before/after} je implementována právě v TARGETu.

    
odpověděl shgnInc 03.06.2014 06:13
5

Tento příkaz bude kopírovat přírůstková data a bude je synchronizovat se vzdáleným serverem.

  1. Kopíruje pouze přírůstková data.
  2. Smazá-li nějaká data odstraněná ze zdroje.
  3. Pokud se v cílovém místě odstraní nějaká data, zkopíruje se znovu.
  4. v podstatě tento příkaz udrží obě synchronizované prostředí

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

Příklad:

rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup
    
odpověděl Ganesh Ghube 29.07.2015 14:12