Sadece yeni dosyaları rsync nasıl


144

Yeni oluşturulan dosyayı daha sonra ekleyerek ana web sunucumu uzak sunucuya eşitlemek için rsync ayarlamaya çalışıyorum.

İşte kullandığım komut:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

Ancak web sunucusu, '--update' bayrağına rağmen aslında tüm dosyaları aktarıyor gibi görünüyor. Farklı bayrak kombinasyonlarını denedim (örn. '-A' atlamak ve bunun yerine '-uv' kullanmak) ancak hiçbiri yardımcı olmadı. Sadece rsync komutunu sadece yeni eklenen dosyaları göndermek için nasıl değiştirebileceğimi merak ediyorum. Teşekkürler


2
Eğer dosyaları senkronize etmek istiyorsanız için uzak sunucuya, son gelmemeli? ie rsync /foo/bar remoteuser@remotehost:/foo/bar
ostrokach

Bu web sayfası ilginizi çekebilir . Ayrıca, dosya sistemine dikkat edin. Sunucunun dosya sistemi bu -aseçeneğin ima ettiği her şeyi desteklemiyorsa (sahip, grup, izinler, ...) sorunumuzun nedeni bu olmalıdır.
ppr,

2
Yanıtların hiçbiri, yerel dosyaların uzak hedefe tam olarak kopyalanmadığı ve yalnızca daha yeni dosyaları rsync yapmak istediğiniz sorunu çözmez.
Axel Bregnsbo,

Ben sadece -cseçeneği buldum . Değişiklik zamanı veya boyutu yerine, bir sağlama toplamı temelinde varolan dosyaları atlar.
18'de

Yanıtlar:


181

Kimden man rsync:

--ignore-existing       skip updating files that exist on receiver

--updatebiraz farklı bir şey yapıyor, bu yüzden muhtemelen beklenmedik sonuçlar alıyorsunuz (bkz. man rsync):

Bu, rsync'i hedefte var olan dosyaları atlamaya ve kaynak dosyadan daha yeni bir değiştirilmiş zamana sahip olmaya zorlar . (Mevcut bir hedef dosya, kaynak dosyaya eşit bir zamana sahipse, boyutlar farklıysa güncellenecektir.)


1
Aslında bu komutu '--update' yerine '--enoriten' ile denedim. Hızlı bitti, ancak yeni dosyaları uzak ana bilgisayara yerleştirmiyor. Herhangi bir fikir? Teşekkürler
süpermario

13
Man sayfalar emiliyor (oraya doğru gittim), örnek olarak --ignore-existing, alıcıda var olan dosyaları aktarma ya da alıcıda aynı ada sahip bir dosya / klasör varsa, dosya aktarma anlamına mı geliyor?
puk

7
--update gelmez mtimes (ki aynı olduğunda dosyaları atlamak değil ifadeler ne anlama geldiği). Bunu test ettim. "Yalnızca hedeften daha yeni olan kaynak dosyalar kopyalanacak" ifadesinin daha iyi anlaşılacağına inanıyorum.
Ahtapot

4
@Octopus "yalnızca hedeften daha yeni olan kaynak dosyalar kopyalanacaktır" ... veya hedef dosyadakilerle aynı zamana sahip fakat farklı boyutlarda olan kaynak dosyalar . Bunun önemli bir nokta olduğunu düşünüyorum. (Chris bunu zaten kapladı, teşekkürler)
Jonathan Komar

Yani ihtiyacınız var - girişen var ve -r (özyinelemeli). -v (ayrıntılı) olması çok güzel :-)
DutchUncle

40

Benim durumumda da benzer sorunlarım vardı, tüm dosyaları sadece değiştirilmiş / yenileri yerine aktarmakla. Bunu -t(yerine -a) ve -P(eşdeğer ) parametrelerini kullanarak çözdüm --partial --progress:

rsync -h - v - r - P - t kaynak hedefi

Bu, yalnızca yeni dosyaları ve zaten var olan ancak değiştirilen dosyaları aktarır: -abenim durumumda, kaynak ve hedef sistemlerimde farklı kullanıcılar ve gruplar olduğu için çalışamayan kullanıcı ve grup kimliği eşitlemesi gibi çok fazla şey yapar.

Ayrıntılı parametreler:

  • -h: okunabilir insan sayıları
  • -v: ayrıntılı
  • -r: dizinlere geri dönme
  • -P: --partial(kısmen transfer edilmiş dosyaları sakla) +
            --progress(transfer sırasında ilerleme göster)
  • -t: değişiklik zamanlarını koru

2
'-A çok fazla' için +1 (gerçekten -rlptgoD, bu nedenle izinler düzleştirilmez, gruplar ve mülkler korunur - tipik oyun güvenliği yedeğim değil ...)
Frank Nocke

2

Rsync ile olan deneyimime göre, 1TB'lik bir bölüm kopyalamanın verimli olması için çok büyük. Bunu işlemek için sonsuza dek rsync alır. Bunun yerine, alt dizinlere göre yapın. Yani, her ana alt dizin için rsync'i çalıştırın. On binlerce dosyayı dengelemek zorunda kalmazsa, çok daha hızlı gider.


1
Belki de hafıza tükendi ve sisteminiz değişmeye başladı?
Marcel Burkhard

-2

Deneyin

rsync -zvrt --update SOURCE DESTN

8
OP için yukarıdaki komuta biraz daha fazla açıklama getirilecektir.
Peschke

man sayfasından -u, --update alıcısında daha yeni olan dosyaları
atla`
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.