Yanıtlar:
Komutunuzun çalışmamasının nedeni, rsync kullanım kılavuzunda açıklanmaktadır (vurgu eklenmiştir):
--delete
Bu, rsync'e harici dosyaları alıcı taraftan (gönderen tarafta olmayanlar) silmelerini, ancak yalnızca senkronize edilen dizinler için bildirmelerini sağlar. Jokerin kabuk tarafından genişletildiğinden ve rsync tarafından alındığından, rsync'den tüm dizini (ör. "Dir" veya "dir /") direktörün içeriği için bir joker karakter kullanmadan göndermesini istemeniz gerekir. Bireysel dosyaları aktarma isteği, dosyaların üst dizinine değil --Delete-exclude seçeneğini kullanmadığınız veya kuralları yalnızca gönderen taraftaki eşleşme olarak işaretlemediğiniz sürece, aktarımın dışında bırakılan dosyalar da silinmez. (FİLTRE KURALLARI bölümünde değiştiricileri dahil etme / hariç tutma bölümüne bakın).
Böylece, koşarken
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
DEST'teki istenmeyen dosyalar silinmiyor çünkü aslında bir dizinin senkronize edilmesini istemediniz, fakat sadece bir avuç belirli dosya için. İstediğiniz sonuçları elde etmek için, şunun gibi bir şey deneyin:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
İçerdiği emirlerin direktifleri içerdiği ve hariç tuttuğunu unutmayın. Temel olarak, her dosya göründükleri sırayla desenleri dahil etme veya hariç tutma ile kontrol edilir. Bu nedenle, .jpg veya .txt uzantılı dosyalar, dışlanan "*" modeliyle eşleşmeden önce "dahil edilen" modellerle eşleştiğinden senkronize edilir. Diğer her şey --exclude '*'
model tarafından dışlanır . Bu --delete-excluded
seçenek, DEST tarafındaki dışlanan dosyaların bile silinmesini sağlar.
--delete-excluded
. Onsuz, sadece *.jpg
ve *.txt
hedef tarafta silinebilir. Bununla beraber, ilgisiz dosyalar da silinir. Rsync filtreleri hakkında bu eğitimde ilginizi çekebilir .