Önce rsync'in mevcut dosyaları güncellemesini sağlayın, daha sonra yenilerini oluşturun?


1

Düzenli olarak rsync kullanarak bir hedefe senkronize ettiğim bir kaynak dizinim var:

rsync --bwlimit=1600 --recursive --times
      --omit-dir-times --copy-links --modify-window=30
      --inplace --delete-before --progress --stats --whole-file
      --itemize-changes --human-readable ./ /media/0123-4567/

Hedef medya sadece senkronizasyon için doğru boyut: hedef 1000 MB'lık bir bölümdür, kaynağında 990 MB dosya vardır; kaynaktan boş bir hedefe senkronize etmek iyi sonuç verir.

Sorun, eski bir sürümü içeren bir hedefle senkronize etmemdir: mevcut kaynak dosyalardan bazıları mevcut sürümde daha küçüktür ve bazıları da yeni eklenir. Toplam boyut 990 MB; ancak rsync "ilk önce yeni dosyaları kopyala, sonra mevcut olanı güncelle" stratejisini seçiyor gibi görünüyor, ilk bölüm çalışmaz, çünkü güncelleme ile boş bırakılması gereken alan henüz mevcut değil.

                                       version 1     version 2
 files not changed:                     800 MB        800 MB
 new files in v2:                         0 MB         80 MB
 files changed between versions:        190 MB        110 MB 

 total                                  990 MB        990 MB

Başka bir deyişle, nasıl rsync yapabilirim güncelleştirme İlk önce hedef (bu benim durumumda boş alan olacak) ve ancak o zaman yeni dosyalar ekle ?

Şimdiye kadar, sadece bu parametrede farklı olan iki ayrı çağrı yaparak bu sorunu hackledim:

rsync --existing [...]
rsync --ignore-existing [...]

Bu, önce mevcut dosyaları günceller ve sonra yenilerini kopyalar; Bunu tek bir komutla yapmanın bir yolu var mı?


Yeni sürümde bulunmayan dosyalar için benzer işlevler olduğunu unutmayın: --delete-before; Hiç bulamadım * --update-before veya manpage de somesuch.
Piskvor

Ayrıca, daha büyük bir hedef bölüm kullanmak mümkün değildir (hedef, kullanıma hazır bir disk değildir, sahip olduğum şeyle çalışmam gerekir).
Piskvor

Yanıtlar:


3

Şimdiye kadar, bu konuda iki ayrı çağrı yaparak hackledim.   sadece bu parametrede farklı olan:

rsync - varolan [...]
rsync - dişli mevcut [...]

Evet, doğru yol bu.

Bu, önce mevcut dosyaları günceller ve yenilerini kopyalar   sonra; Bunu tek bir komutla yapmanın bir yolu var mı?

Gerek yok:

  • Hız perspektifinden bakıldığında, sadece önemsiz bazı genel masraflardan fedakarlık ediyorsunuz.
  • Belgeleme perspektifinden bakıldığında, ne yaptığınızı belirten bazı açık yollardan çok daha açıktır.

İyi noktalar - stat tepegöz --times ihmal edilebilir olmalıdır; kullanıyor olsaydım --checksum, bir etkisi olabilir.
Piskvor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.