Saya menemukan beberapa jawaban untuk pertanyaan, jadi ingin bertanya kepada orang-orang yang benar-benar menggunakannya, daripada hanya ingin membuat blog terbesar dengan mengisi dengan informasi semi-acak yang tidak berguna.
Skenario: Saya
rsync -av --progress /dir/a /dir/b
dan dia mengerjakannya.
Saya menambahkan file baru ke / dir / a dan menjalankan perintah yang sama lagi, ia tahu apa yang dilakukannya dan hanya menyalin file baru.
Saya menambahkan file baru ke / dir / a dan mengganti nama beberapa file di / dir / b, dan mungkin menghapus beberapa juga.
Jika saya jalankan rsync -av --progress /dir/a /dir/b
lagi, apa yang akan disalin? Hanya file-file baru karena ia tahu apa yang telah disalin sebelumnya, atau file-file yang diubah namanya / dihapus juga, karena mereka tidak lagi ada.
Dan sebagai bonus, jika file sebelumnya disalin yang disalin lagi, apakah ada cara untuk mencegah itu, sehingga hanya tambahan baru ke / dir / a disalin?
Saat ini saya senang memeriksa hal-hal secara manual, tetapi karena data semakin besar, saya akan membutuhkan lebih banyak otomatisasi untuk melakukan tugas ini.
-i
flag sangat berguna. Untuk setiap file, ia memberikan string kecocokan yang dapat didekodekan untuk melihat mengapa itu cocok (flag untuk waktu mod, flag untuk ukuran, dll.)Jawaban:
Tidak, ia tidak tahu apa yang ia lakukan pada lari sebelumnya. Ini membandingkan data di sisi penerima dengan data yang akan dikirim. Dengan data yang cukup kecil, ini tidak akan terlihat, tetapi ketika Anda memiliki direktori yang cukup besar, waktu yang dihabiskan membandingkan sebelum penyalinan benar-benar dimulai mudah dirasakan.
Pemeriksaan default untuk waktu dan ukuran modifikasi file. Dari
man rsync
:Dan:
Perhatikan bahwa ini tidak tersirat oleh opsi yang Anda gunakan.
-a
adalah:sumber
--fuzzy
sekali akan mengenalinya sebagai sama di direktori yang sama. Menggunakan--fuzzy
dua kali memperluas kemampuan ini ke lokasi lain. Lihatman rsync
detailnya. Tentu saja, salah satu alasan utama untuk menggunakanrsync
adalah kemampuannya untuk menyalin hanya bagian-bagian dari file yang telah berubah. Ini dapat membuat transfer melalui jaringan lebih cepat. BTW, opsi checksum disebutkan di atas untuk penjelasannya tentang cararsync
kerjanya. Dalam kebanyakan kasus, itu tidak boleh digunakan.Umum
Jika saya mengerti benar,
rsync -av
tidak memiliki memori, jadi itu akan menyalin file yang diganti namanya / dihapus juga, karena mereka ada di sumber tetapi tidak lagi ada di target.Kiat
Gunakan opsi
-n
, 'dry run', untuk memeriksa apa yang terjadi sebelum Anda menjalankanrsync
baris perintah Anda .Perhatikan makna khusus garis miring setelah direktori sumber, dan lihat perbedaannya
dan
yang dijelaskan dalam manual
man rsync
.Contoh
Kasing khusus Anda (menambahkan file ke direktori sumber 'a' dan menghapus file dari direktori target 'b') akan menambahkan file yang ditambahkan dan file yang disalin sebelumnya, karena masih dalam direktori sumber. Ini akan terjadi baik dengan dan tanpa opsi
-u
dan saya tidak tahu opsi apa punrsync
untuk memperbaikinya dengan mudah, jika Anda ingin menyimpannya di direktori sumber.Tetapi Anda dapat menghapusnya dari direktori sumber atau memasukkan nama file ke dalam file
excluded
dan menggunakan opsi--exclude-from=excluded
(untuk banyak file) atau hanya--exclude=PATTERN
untuk satu atau beberapa file.Alternatif:
unison
Anda mungkin ingin menguji alat ini
unison
, yang merupakan alat sinkronisasi . Ini menyediakan metode visual untuk mengidentifikasi kasus-kasus khusus dan memutuskan apa yang harus dilakukan. Ada versi GUI (unison-gtk
).sumber
unison-gtk
selama beberapa tahun, dan saya senang dengan itu. (Saya menggunakanrsync
juga.)Ini hanya menyalin file-file baru di / dir / a. Apa pun yang Anda lakukan di / dir / b akan diabaikan, kecuali jika Anda menggunakan opsi --delete. Dalam hal ini, file yang diubah namanya di / dir / b akan dihapus. Ini akan memaksa / dir / b untuk menjadi persis seperti / dir / a.
Tentang bonus, maksud Anda seperti dalam kasus mengganti nama file di / dir / a, dan kemudian rsyncing ke / dir / b? Saya rasa tidak ada cara untuk mencegah rsync dari hanya menyalin file lagi dalam kasus itu.
sumber