Hogyan lehet rsync törölni a forrás mappából törölt fájlokat?

131

Nemrég hoztam létre egy gépet az Ubuntu Server segítségével a játékszerverek tárolására. Mindegyik játékkiszolgálóra olyan mentési bővítményt telepítettem, amely gyakran készít egy biztonsági másolatot a játékfájlokról a gép adott mappájában. Én is létrehoztam egycron feladatot, hogy automatikusan mentse ezeket a biztonsági másolatokat a Dropbox mappájába minden este az rsync használatával a-a opcióval.

Néhány hónap múlva a Dropbox fiókom elérte a tárolási korlátot, és rájöttem, hogy nem tudnék ilyen sok biztonsági másolatot készíteni, ezért beállítottam a játékszerver biztonsági másolatát, hogy ne tartson sok mentést, majd néhány napig várta ha törölné az régebbi biztonsági másolatokat, ahogy azt heti rendszerességgel tervezi. A biztonsági másolat elkészült, és törölte a régebbi biztonsági másolatokat, ezért arra számítottam, hogy arsync cron feladatot később törölni szeretném a régebbi biztonsági mentéseket a Dropbox mappából, hogy megfeleljen a forrás mappának, de ez még nem történt meg. Így van néhány kérdésem:

  • Alapértelmezés szerint arsync csak hozzáad fájlt a célmappa amelyeket hozzáadtak a forrás mappához és a változtatás fájlokhoz megváltozott a forrás mappában, de a NEM törli fájlokat amelyeket a forrás mappából töröltek?

  • Ha ez a helyzet, akkor mi a legjobb módja annak, hogyrsync ezt tegye? én hogy a célmappa tökéletesen tükrözze a forrás mappát, és ez azt jelenti, hogy a forrásból törölt fájlokat törölni kell mappában.

Néhány lehetőséget látok arsync man oldalán felsorolt ​​lehetőségek közül, amelyek megcsinálhatják a trükköt, de mivel nem vagyok ismerős.

    
készlet user254251 03.06.2014 05:53
forrás

3 válasz

151

Ha törölni kívánja a fájlokat a célpontban, add hozzá a--delete opciót a parancshoz. Például:

rsync -avh source/ dest/ --delete
    
válasz adott GarethD 26.08.2015 09:14
forrás
32

Az rsync parancs nem fogja törölni a fájlokat, miközben a parancsdelete parancsát használja. Így ha a forrásban hozzáadott fájlok vagy mappák vannak, akkor szinkronizálni fognak a célzás nélkül.

Javasolom, hogy arsync -ot a forrásfájlokról készíts biztonsági másolatot, és afind ... rm törlési fájlokat használd a fájlok időtartamára vagy méretére:

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

A fenti kódblokk, készítsen biztonsági másolatot a forrásról, majd törölje a legutóbb módosított időtartamú fájlokat.

Frissítés

Úgy találom, hogy adelete opciók csak a TARGET-ra vonatkoznak, ha egyes fájlok eltávolításra kerülnek a forrásból, akkor arsync --delete eltávolítja őket a TARGET-ből. És adelete opciót aafter és abefore szerint, ahogy az a man oldalán meg van említve:

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

Azt jelenti, hogy:

  1. rsync törölje a TARGET-ből származó fájlt, amelyet eltávolítottak a forrásból.
  2. Az rsync fájlok szinkronizálását kezdi.

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

Azt jelenti, hogy:

  1. Az rsync fájlok szinkronizálását kezdi.
  2. Az rsync törli a TARGET-ből származó fájlt, amelyet szinkronizálás után eltávolítanak a forrásból.

MEGJEGYZÉS : a--delete-{before/after} csak a TARGET alkalmazásban valósul meg.

    
válasz adott shgnInc 03.06.2014 06:13
forrás
5

Ez a parancs a növekményadatokat másolja és szinkronban tartja a távoli kiszolgálóval.

  1. Csak a növekményes adatokat másolja.
  2. Törli a forrásból törölt adatokat.
  3. A forrásból újra másol, ha a rendeltetési helyen törölt adatok vannak.
  4. Alapvetően ez a parancs mindkét környezetet szinkronban tartja.

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

Példa:

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
    
válasz adott Ganesh Ghube 29.07.2015 14:12
forrás