Bu konuları okudum:
Ancak, söyleyebildiğim kadarıyla (belki bir şey kaçırıyorum), aşağıdaki soruyu kapsamıyorlar:
rsync 'dan istisnalar dışında, gönderen tarafta mevcut olmayan dosyaları kopyalamayı ve silmeyi nasıl istersiniz? (örneğin, gönderen tarafta depo olmasa bile alıcı taraftaki Mercurial veri havuzunu
.hg kaldırmayın).
@Richard Holloway'ın aşağıdaki cevabından borçlanma. Diyelim ki şu satırım var:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Anladığım kadarıyla, bu satır,
dont_delete_me İle eşleşenler dışında,
rsync gönderme yolunda olmayan her şeyi siler. Şimdi sorum şu: rsync alıcı tarafta
dont_delete_me ile eşleşen dosyaları
dont_delete_me? ile eşleşse bile tutar mı?
Eğer kullanırsan
--delete ve
--exclude birlikte hariç tutulan konumda olanlar kaynak dosyalar kaldırılsa bile silinmez.
Ancak bu, klasörün hiç
rsync 'd olmaması sorununu doğurur. Yani bu klasörü
rsync yapmak için başka bir
sync işine ihtiyacınız olacak.
Örneğin.
rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/ rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh
Bunları başka bir şekilde çalıştırabilirsiniz, ancak daha sonra kaldırılan tüm dosyaları silip değiştirir, bu da o kadar verimli değildir.
Tek astar olarak yapamazsınız.
Aşağıdaki çözümün benim amacım için işe yaradığını buldum:
rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest
(Not: Kuru çalışma yapmak için
-n Seçeneğini ekleyin ve
--delete İle
--delete-excluded!)!)
Komutun çalıştırılması aşağıdaki özelliklere neden olur:
srcdizini değiştirilmedi
Hedef
dest klasörü, aşağıdakiler dışında kaynak klasörle eşleşir:
do_not_send_to_destlistesindeki öğeler hedefe gönderilmez ve
do_not_modify_in_destlistesindeki öğeler hedefte değiştirilmez.
do_not_" Dosyalarından birinde listelenmesi sorun değildir.)
açıklaması
Rsync komut satırı argümanlarını soldan sağa okurken sanırım
--delete Argümanı rsync'in dahili olarak "modları değiştirmesine" (bir anlamda)
--exclude-from yine farklı bir anlamla.
Uyarı:
do_not_send_to_dest Listesindeki bir öğe hedefte zaten varsa, o zaman:
--deleteİfadesini
--delete-excludedOlarak değiştirmek, hedefinizdeki iki listenizden birinde listelenen her şeyi silecektir. xD (Belki rsync açık/esnek olacak şekilde yazılmıştır, ancak bazılarının nüansları vardır?)
Hafif kullanım test edilmiştir.
"
rsync version 3.0.9 protocol version 30" Kullanıyorum.