Saya melihat pada halaman manual rsync bahwa ada sejumlah delete
opsi, tetapi tidak benar-benar memahami perbedaan di antara mereka. Apa perbedaan antara opsi-opsi ini?
--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
--delete-before
digambarkan sebagai(default)
? Saya tidak mengerti apa(default)
artinya.man
laman untukrsync version 3.1.2 protocol version 31
. Namun, tebakan saya pada versi dengan teks yang dikutip adalah bahwa jika Anda hanya menggunakan--delete
daripada--delete-WHEN
, maka itu seolah-olah Anda menentukan di--delete-WHEN
manaWHEN
defaultnyabefore
.Jawaban:
--del/--delete_during
: Menghapus file dari direktori tujuan saat disalin (menghemat memori dibandingkan dengan--delete-before
:--delete-before
melakukan pemindaian terpisah untuk mencari yang dapat dihapus)--delete
: Menghapus file di direktori tujuan jika tidak ada di direktori sumber.--delete-before
: Hapus file di direktori tujuan sebelum menyalin file dengan nama yang sama dari direktori sumber--delete-during
: Hapus file di direktori tujuan WHILE menyalin file dengan nama yang sama dari direktori sumber--delete-delay
: Tandai dihapus saat transfer, tetapi tunggu sampai transfer selesai--delete-after
: Receiver menghapus setelah transfer, bukan sebelum ... Jika beberapa bagian rsync memindahkan file tambahan di tempat lain, Anda ingin ini, bukan--delete-delay
, karena--delete-delay
memutuskan apa yang akan dihapus di tengah transfer, sedangkan--delete-after
memeriksa direktori untuk file yang harus dihapus SETELAH semuanya selesai.--delete-excluded
: Menghapus file dari direktori tujuan yang secara eksplisit dikecualikan dari mentransfer dari direktori sumber.Inti dari rsync bukan menyalin, ini adalah pengarsipan. Ini adalah perbedaan penting. Memproses file yang dihapus / diubah sangat penting, dan dalam banyak kasus bernuansa.
The
--delete
bendera khususnya adalah salah satu Saya telah melihat kacau berkali-kali. Banyak orang menggunakan rsync untuk memindahkan file ke penyimpanan prioritas rendah, dan dalam hal ini Anda ingin file yang Anda pindahkan masih ada di direktori tujuan. Bukan itu yang dihapus:--delete
pastikan bahwa, ketika Anda menghapus file dari direktori sumber, itu juga dihapus dari direktori tujuan Anda, sehingga tujuan Anda tidak penuh dengan sampah ... Setelah melihat seorang pria menghapus cadangannya dengan memasukkan drive baru, dan tidak mematikan skrip rsync malamnya. Script melihat bahwa dir sumber sekarang kosong, dan itu menghapus setiap file di dir tujuan, sehingga mereka cocok.Sebagian besar opsi lain terkait ruang atau kinerja. Ketika Anda menghapus file itu penting jika Anda ingin memastikan transfer berhasil sebelum Anda melakukan apa pun, tetapi jika perangkat Anda terlalu kecil untuk menangani 2 salinan dari semua informasi, Anda perlu menghapus saat Anda pergi, dll. Ini adalah sedikit aneh karena sejarahnya yang panjang di berbagai platform: beberapa opsi telah ditambahkan sehingga orang yang terbiasa dengan perilaku tertentu tidak akan bingung.
sumber
delete-after
menghapus setiap file di antara sinkronisasi, atau hanya setelah seluruh dir telah dicerminkan? Saya pikirdelete-after
sudah cukup untuk kebutuhan saya tetapi saya tidak mendapatkan ruang yang tersisa di perangkat ketika membuat cadangan salah satu drive saya.delete-during
tidak selalu mencegahno space left on device
(di Linux). Jadidelete-before
adalah satu-satunya cara dijamin untuk menghindarinya (seperti saat mirroring drive yang hampir penuh, dan drive tujuan juga hampir penuh).Ada dua hal yang terjadi:
Baik pengirim atau penerima dapat diinstruksikan untuk melakukan penghapusan (saya tidak yakin mengapa ini penting). Jadi ketika rsync dari satu komputer terhubung ke server rsync di sisi lain, ini menentukan siapa yang secara efektif mengeluarkan perintah delete.
Ketika itu terjadi sangat mudah ... sebelumnya berarti semua file dihapus, dan MAKA rsync menyalin file-file tersebut. selama berarti saat melewati daftar file, itu menghapus mereka ketika datang ke mereka, dan setelah itu menunggu sampai semua file ditransfer dan kemudian menghapus sisi jauh. Ini hanya penting ketika transfer terganggu.
sumber
--delete-before
untuk menghapus hanya file-file yang perlu hilang, tidak semua file! Tapi saya kira itu mungkin bahwa rsync menghapus semuanya dan kemudian mentransfer data "baru" (mungkin tidak berubah) ...--remove-source-files
.Satu hal lain yang layak disebutkan adalah bahwa jika direktori sumber Anda berakhir
/*
, maka rsync hanya akan mempertimbangkan file - file itu dan bukan direktori itu sendiri (dan dengan demikian tidak adanya file yang ingin Anda hapus pada tujuan).Jika Anda menentukan opsi hapus di atas, tetapi rsync sepertinya tidak dihapus, maka periksa untuk memastikan Anda tidak menggumpal secara tidak sengaja dan memberikan daftar file saat Anda merujuk ke direktori itu sendiri.
sumber