Saya telah membaca utas ini:
- rsync --delete --files-from = list / dest / tidak menghapus file yang tidak diinginkan
- Hapus file asing dari dir dir melalui rsync?
Tapi, sejauh yang saya tahu (mungkin saya kehilangan sesuatu), mereka tidak mencakup pertanyaan berikut:
Bagaimana Anda meminta rsync
untuk menyalin file dan menghapusnya di sisi penerima yang tidak ada di sisi pengiriman, dengan pengecualian? (mis. jangan menghapus repositori lincah .hg
di sisi penerima, bahkan jika tidak ada repositori di sisi pengirim).
Satu kemungkinan?
Meminjam dari jawaban @Richard Holloway di bawah ini. Katakanlah saya memiliki baris berikut:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Sejauh yang saya mengerti, baris ini akan rsync
menghapus semua yang ada di jalur penerima yang tidak ada di jalur pengiriman, kecuali hal-hal yang cocok dont_delete_me
. Pertanyaan saya sekarang adalah: Apakah rsync menyimpan file di sisi penerima yang dicocokkan oleh dont_delete_me
bahkan jika tidak ada di sisi pengirim yang cocok dont_delete_me
?
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
bukankah itu akanrsync
menghapus semua yang ada di jalur penerima yang tidak ada di jalur pengiriman, kecuali yang cocok dengandont_delete_me
? Yang paling penting, apakahrsync
semua pihak yang ada di sisi penerima akan cocokdont_delete_me
meskipun tidak ada yang cocok dengan pihak pengirimdont_delete_me
? Jika itu masalahnya, saya pikir itu satu-satunya jalur yang saya butuhkan, kan?--delete
, kecuali jika Anda secara eksplisit menentukan--delete-excluded
. Lihat deskripsi--delete
dan--delete-excluded
dalam manual rsync.Saya menemukan bahwa solusi berikut berfungsi untuk tujuan saya:
(Catatan: Tambahkan
-n
opsi untuk melakukan dry-run, dan jangan ubah--delete
ke--delete-excluded
!)Menjalankan perintah menyebabkan properti berikut:
src
tetap tidak dimodifikasidest
Folder tujuan cocok dengan folder sumber kecuali bahwa:do_not_send_to_dest
daftar tidak dikirim ke tujuan, dando_not_modify_in_dest
daftar dibiarkan tidak dimodifikasi di tujuan.do_not_
".)Penjelasan
Saya kira ketika rsync membaca argumen baris perintah dari kiri ke kanan,
--delete
argumen tersebut tampaknya menyebabkan rsync untuk secara internal "beralih mode" (dalam arti tertentu), memungkinkan penggunaan kedua--exclude-from
opsi lagi tetapi dengan makna yang berbeda.Peringatan:
Jika item dalam
do_not_send_to_dest
daftar sudah ada di tujuan, maka:--delete
ke--delete-excluded
akan menghapus semua yang ada di tujuan yang terdaftar di salah satu dari dua daftar Anda. xD (Mungkin rsync ditulis terbuka / fleksibel, tetapi ada yang bernuansa?)Penggunaan ringan diuji.
Saya menggunakan "
rsync version 3.0.9 protocol version 30
".sumber