Rsync silme seçenekleri arasındaki farklar nelerdir?


118

Rsync man sayfasında bir dizi deleteseçeneğin olduğunu görüyorum , ancak aralarındaki farkları gerçekten anlamıyorum. Bu seçenekler arasındaki farklar nelerdir?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
Neden --delete-beforeolarak tanımlanıyor (default)? Ne anlama (default)geldiğini anlayamıyorum .
Marco Marsala

1
Artık mansayfada varsayılan olarak belirtilmemiş rsync version 3.1.2 protocol version 31. Ancak, alıntılanan metin içeren sürüm hakkındaki tahminim, yalnızca kullanmak --deleteyerine kullanmanız --delete-WHENdurumunda --delete-WHEN, WHENvarsayılanları belirteceğiniz şekildedir before.
Tom Hale,

Yanıtlar:


114
  • --del/--delete_during: Dosyaları hedef dizinden kopyalandıkça siler (hafızaya kaydederek şununla karşılaştırır --delete-before: --delete-beforesilinebilirleri aramak için ayrı bir tarama yapar)

  • --delete: Kaynak dizinde bulunmuyorsa, hedef dizindeki dosyaları siler.

  • --delete-before: Aynı dizinde aynı adı taşıyan dosyayı kaynak dizinden kopyalamadan önce hedef dizindeki dosyaları silin

  • --delete-during: Hedef dizindeki dosyaları aynı ismin bulunduğu dosya kaynak dizininden kopyalarken sil

  • --delete-delay: İşaret aktarma sırasında silinir, ancak aktarma tamamlanana kadar bekleyin

  • --delete-after: Alıcı aktarmadan sonra siler, önce değil ... Eğer rsync'in başka bir kısmı başka bir yere başka bir yere taşınmışsa, bunun yerine istersiniz --delete-delay, çünkü --delete-delayaktarımın ortasında ne sileceğine karar verirken , bunun --delete-afteriçin dosyalar dizinini kontrol eder. Her şey bittikten sonra silinmesi gerekir.

  • --delete-excluded: Dosyaları, kaynak dizinden aktarmanın açıkça hariç tutulduğu hedef dizindeki dosyaları siler.

Rsync noktası kopyalanmıyor, arşivleniyor. Bu önemli bir ayrımdır. Silinen / değiştirilen dosyaların işlenmesi kritiktir ve çoğu durumda nüanslıdır.

Özellikle --deletebayrak, birçok kez berbat gördüğüm bir bayrak. Birçok kişi, dosyaları düşük öncelikli depolamaya taşımak için rsync'i kullanır ve bu durumda taşıdığınız dosyaların hedef dizinde hala EXIST'e geçmesini istersiniz. Silme ne anlama gelmez: --deleteKaynak dizinden bir dosyayı sildiğinizde, hedef dizinden ALSO silinir, böylece hedefiniz önemsiz bir şey alamaz ... Bir erkeğin yedeğini sildiğini görünce yeni bir sürücü koyarak ve onun gecelik rsync betiğini kapatarak. Komut dosyası, kaynak dizinin şimdi boş olduğunu ve hedef dizindeki her dosyayı sildiğini görerek eşleşmelerini sağladı.

Diğer seçeneklerin çoğu alan veya performansla ilgilidir. Dosyaları silerken, bir şey yapmadan önce aktarımın başarılı olduğundan emin olmak istiyorsanız önemlidir, ancak cihazınız tüm bilgilerin 2 kopyasını işlemek için çok küçükse, gittiğinizde silmeniz gerekir. çok sayıda platformda uzun geçmişi nedeniyle biraz tuhaf: bazı davranışlar, bazı davranışlarda alışkın olan kişilerin kafasını karıştırmamak için eklendi.


3
Öyleyse --delete ve --delete-aynı mı önce? adam rsync --delete'nin dosyaları ne zaman sildiğini söylemiyor.
ppr

@ppr: Sisteme bağlı. Bu kadar çok özel seçeneğe sahip olmasının sebebi Solaris'teki silme = = HP-UX'ta silme = = AIX'te silme = = Linux'ta silme.
Satanicpuppy

Bir dizinin tamamını delete-aftersenkronize ederken, senkronizasyon arasındaki her dosyayı mı, yoksa yalnızca tüm dizinin yansıtılmasından sonra mı silersiniz? delete-afterİhtiyaçlarım için yeterli olduğunu düşündüm ama sürücülerimden birini yedeklerken cihazda yer kalmadı.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: Ya öyle. Hareket edeceği her şeyi hareket ettirir ve bittiğinde, şeyleri silmeye başlar. Her şey taşınmadan önce silmek isterseniz, --delete-during
Satanicpuppy

2
Bazı deneyimlerden sonra delete-during, bunun her zaman engellemediğini bile düşünüyorum no space left on device(Linux'ta). Bu delete-before, bundan kaçınmanın tek garantili yoludur (neredeyse dolu bir sürücüyü yansıtırken ve hedef sürücüyü de neredeyse tamamen doldururken olduğu gibi).
Sridhar Sarnobat

1

Devam eden iki şey var:

  1. Silme kim yapar
  2. Ne zaman

Gönderen veya alıcıya silme işlemini yapmanız istenebilir (Bunun neden önemli olduğundan emin değilim). Bu nedenle, bir bilgisayardan gelen rsync diğer taraftaki rsync sunucusuna bağlandığında, bu silme komutunu kimin etkili şekilde verdiğini belirler.

Olduğu zaman oldukça kolaydır ... önce tüm dosyalar silinir ve THEN rsync dosyalar üzerinde kopyalanır. sırasında dosya listesine girerken, onlara geldiğinde onları siler ve ardından tüm dosyaların aktarılmasını ve ardından uzak tarafın silinmesini bekler. Bu sadece transfer kesintiye uğradığında önemlidir.


Bu seçeneklerin hiçbirinin gönderen tarafından bir şeyleri silmekle ilgili olmadığından eminim . Hepsi (AFAIK), alıcı tarafından bir şeyleri silmekle ilgilidir . Ayrıca şunu söylersiniz: "daha önce tüm dosyalar silinir ve THEN rsync dosyalar üzerinde kopyalanır" - bu doğru mu? Tüm dosyaları --delete-beforedeğil, yalnızca gitmesi gereken dosyaları silmeyi beklerdim ! Ama sanırım mümkün rsync ... "yeni" (muhtemelen değişmedi) veriler üzerinde her şeyi ve daha sonra transfer siler
Quuxplusone

1
Ah, "gönderenin taraftan sil" olduğu rsync'de tarafından desteklenen, ancak bu seçeneğin adıdır --remove-source-files.
Quuxplusone

1

Bahsetmeye değer başka bir nokta, kaynak dizininizin bitmesi durumunda /*, rsync'in yalnızca bu dosyaları göz önünde bulundurması ve dizinin kendisini değil (ve böylece hedefte silinmesini istediğiniz dosyaların bulunmaması) olmasıdır.

Yukarıda bir silme seçeneği belirliyorsanız, ancak rsync silinmemiş gibi görünüyor, ardından dizini kastettiğinizde yanlışlıkla top atmadığınızdan ve dosyaların listesini vermediğinizden emin olun.

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.