rsync kaynak klasörden silinmiş dosyaları nasıl silebilirim?

126

Son zamanlarda, oyun sunucularını barındırmak için Ubuntu Server ile bir makine kurdum. Makinenin belirli bir klasöründe sık sık oyun dünyası dosyaları oluşturan her oyun sunucusu için bir yedek eklenti yükledim. Ayrıca, bu yedekleri her gece cron seçeneğiyle rsync kullanarak Dropbox klasörüne otomatik olarak kopyalamak için bir -a görevi oluşturdum.

Birkaç ay sonra Dropbox hesabım depolama sınırına ulaştı ve çok fazla yedekleme yapamayacağımı fark ettim, bu yüzden oyun sunucusu yedek eklentisini çok fazla yedeklemeyi saklayamadım, ardından birkaç gün bekledim. eğer haftalık yedeklemelerin yapılması planlandığı gibi eski yedeklemeleri silecektir. Yedekleme eklentisi sonunda işini yaptı ve eski yedekleri sildim, bu yüzden rsync cron görevini daha sonra eski klasörleri kaynak klasörle eşleştirmek için Dropbox klasörümden silmeyi bekledim, ancak bunu yapmadı. Bu yüzden birkaç sorum var:

  • Varsayılan olarak, hedef klasöre yalnızca rsync ekleyin dosyası var Kaynak klasöre eklenmiş olan değiştir dosyaları kaynak klasörde değiştirildi, ancak Silmiyor dosyaları kaynak klasörden silindi mi?

  • Eğer durum buysa, rsync 'yi yapmanın en iyi yolu nedir? ben Hedef klasörü, kaynak klasörü mükemmel şekilde yansıtmak ve bu, kaynaktan silinmiş olan tüm dosyaların silinmesi anlamına gelir klasörü.

Kılavuz sayfasında listelenen rsync için manuel sayfada listelenen bazı seçenekleri görüyorum, ancak bilmediğimden beri.

    
sordu user254251 03.06.2014 05:53

3 cevap

144

Hedefteki dosyaları silmek için, komutunuza --delete seçeneğini ekleyin. Örneğin:

rsync -avh source/ dest/ --delete
    
verilen cevap GarethD 26.08.2015 09:14
32

rsync komutu, bu komuttaki bazı seçeneklerinden delete kullanırken herhangi bir dosyayı silmez. Bu nedenle, kaynağa eklenen herhangi bir dosya veya klasör, silinmeden hedefle senkronize edilir.

Kaynak dosyalardan yedekleme yapmak için rsync kullanmanızı ve dosyaların zaman veya boyutlarının boyutu için silme dosyaları için find ... rm kullanmanız önerilir:

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

Yukarıdaki kod bloğu, kaynağından bir yedekleme yapın ve son değiştirilen sürenin 2 aydan fazla olduğu her dosyayı silin.

GÜNCELLEME

delete seçeneğinin sadece TARGET için olduğunu ve bazı dosyaların kaynağından kaldırılması durumunda rsync --delete öğesinin TARGET uygulamasından kaldırıldığını buldum. Ve erkek sayfasında belirtildiği gibi delete seçeneği, after ve before değerine göre:

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

Şu anlama gelir:

  1. rsync dosyayı KAYDET'ten kaldırılan TARGET'ten siler.
  2. rsync dosyaları senkronize etmeye başlar.

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

Şu anlama gelir:

  1. rsync dosyaları senkronize etmeye başlar.
  2. rsync, senkronize edildikten sonra SOURCE kaynağından kaldırılan TARGET dosyasındaki dosyayı siler.

NOT : --delete-{before/after} , sadece TARGET uygulamasında geçerlidir.

    
verilen cevap shgnInc 03.06.2014 06:13
5

Bu komut, artış verilerini kopyalayacak ve uzak sunucuyla senkronize halde tutacaktır.

  1. Yalnızca ek verileri kopyalayacaktır.
  2. Kaynaklardan silinen veriler silinir.
  3. Hedefte herhangi bir veri silindiyse tekrar kaynaktan kopyalanır.
  4. temelde bu komut her iki ortamı da uyumlu olarak koruyacaktır.

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

Örnek:

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

Etiketlerdeki diğer soruları oku