Saya memulai rsync
dan mencoba menggunakannya untuk menyinkronkan dua folder pada sistem lokal. Saya memiliki folder sumber, yang isinya berubah dari waktu ke waktu (beberapa file ditambahkan, beberapa perubahan dan beberapa dihapus) dan folder target yang saya ingin hampir menjadi cermin dari sumber. Jadi yang saya coba adalah menggunakan rsync seperti ini:
rsync -a --delete "${source_dir}" "${target_dir}";
Ini menjaga isi target sama persis dengan isi sumber. Namun, saya ingin dapat menambahkan beberapa file ke target dan bukan ke sumber, tapi saya tidak ingin mereka dihapus setiap kali saya melakukan rsync. Di sisi lain, file yang digunakan untuk disinkronkan dan kemudian dihapus dalam sumber harus tetap dihapus.
Apakah ada cara untuk melakukan ini tanpa harus mengubah perintah untuk setiap file yang ingin saya kecualikan?
Pembaruan : Saya harus menyebutkan bahwa saya tidak terbatas pada rsync. Jika program lain menyelesaikan pekerjaan, itu juga baik-baik saja. Saya baru saja mencoba menyelesaikan ini menggunakan rsync.
Jawaban:
rsync
memiliki opsi bernama--exclude-from
opsi yang memungkinkan Anda membuat file yang berisi daftar file apa pun yang ingin Anda kecualikan. Anda dapat memperbarui file ini kapan pun Anda ingin menambahkan pengecualian baru, atau menghapus yang lama.Jika Anda membuat file kecualikan pada
/home/user/rsync_exclude
perintah baru adalah:Saat membuat file daftar pengecualian, Anda harus meletakkan setiap aturan pengecualian pada baris terpisah. Pengecualian relatif terhadap direktori sumber Anda. Jika
/home/user/rsync_exclude
file Anda berisi opsi berikut:secret_file
dalam direktori sumber Anda akan dikecualikan.${source_dir}/first_dir/subdir
akan dikecualikan, tetapi versi kosongsubdir
akan disinkronkan.${source_dir}/second_dir
dengan awalancommon_name.
akan diabaikan. Jadicommon_name.txt
,common_name.jpg
dllsumber
Karena Anda menyebutkan: Saya tidak terbatas pada rsync:
Script untuk mempertahankan mirror, memungkinkan untuk menambahkan file tambahan ke target
Di bawah ini skrip yang melakukan apa yang Anda gambarkan
Skrip dapat dijalankan dalam mode verbose (diatur dalam skrip), yang akan menampilkan progres cadangan (mirroring). Tidak perlu mengatakan ini juga dapat digunakan untuk mencatat cadangan:
Opsi verbose
Konsep
1. Pada cadangan pertama, skrip:
.recentfiles
2. Pada cadangan berikutnya dan seterusnya
.currentfiles
..recentfiles
(daftar situasi pada cadangan sebelumnya) dibandingkan dengan.currentfiles
. Hanya file.recentfiles
yang tidak ada di dalamnya yang.currentfiles
jelas dihapus dari sumbernya, dan akan dihapus dari target..currentfiles
diganti namanya.recentfiles
untuk melayani siklus cadangan berikutnya dan seterusnya.Naskah
Cara Penggunaan
backup_special.py
Ubah -jika Anda mau- opsi verbose di bagian atas skrip:
Jalankan dengan sumber dan target sebagai argumen:
Kecepatan
Saya menguji script pada direktori 10 GB dengan sekitar 40.000 file dan direktori pada drive jaringan saya (NAS), itu membuat cadangan dalam waktu yang hampir bersamaan dengan rsync.
Memperbarui seluruh direktori hanya membutuhkan beberapa detik lebih dari rsync, pada 40.000 file, yang dapat diterima dan tidak mengejutkan, karena skrip perlu membandingkan konten dengan cadangan yang terakhir dibuat.
sumber