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ı?
--delete-before
; Hiç bulamadım *--update-before
veya manpage de somesuch.