it-swarm-tr.com

Rsync ile dest dir gelen yabancı dosyaları silmek?

Söyle bende

SRC 
  001.jpg
  002.jpg
  001.txt
  a.Zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

Hello.jpg dosyasını DEST'ten kaldırmaz, bunun nasıl arşivleneceği hakkında bir fikriniz var mı?

51
Cheng

Komutunuzun çalışmamasının nedeni rsync için manuel sayfa (vurgu eklenmiştir) ile açıklanmıştır:

--delete

Bu, rsync'e alıcı dosyaları (gönderen tarafta olmayanlar) ancak yalnızca senkronize edilen dizinler için yabancı dosyaları silmesini söyler. rsync'ten dizinin içeriğinde (örneğin "dir/*") joker karakter kullanıldığından joker karakter kullanmadan tüm dizini (örneğin "dir" veya "dir /") göndermesini istemiş olmalısınız. Kabuk ve rsync tarafından genişletilen bu nedenle, dosyaların üst dizinini değil, ayrı ayrı dosyaları aktarma isteği alır. Siz aktarma dışında bırakılan dosyalar - silme-hariç tutma seçeneğini kullanın veya kuralları yalnızca gönderen tarafta eşleşecek şekilde işaretleyin (FİLTRE KURALLARI bölümüne ekleme/hariç tutma değiştiricilerine bakın).

Böylece koştuğunuzda

$ rsync -d --delete SRC:{*.jpg,*.txt} DEST

aslında bir dizinin senkronize edilmesini istemediğiniz için DEST'teki istenmeyen dosyalar silinmiyor, sadece bir kaç belirli dosya için. İstediğiniz sonuçları almak için şöyle bir şey deneyin:

rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/

Dahil etme ve hariç tutma yönergelerinin sırasının önemli olduğuna dikkat edin. Esasen, her dosya içerme veya hariç tutma kalıplarına göründükleri sırayla kontrol edilir. Bu nedenle, .jpg veya .txt uzantılarına sahip dosyalar, hariç tutulan "*" deseniyle eşleşmeden önce "içerilen" desenlerle eşleştiklerinden senkronize edilir. Diğer her şey --exclude '*' Desen. --delete-excluded seçeneği, DEST tarafındaki hariç tutulan dosyaların bile silinmesini sağlar.

73
Steven D