Saya ingin membuat cadangan direktori rumah saya ke drive eksternal setiap malam menggunakan cron
pekerjaan untuk dieksekusi rsync
. Saya tidak yakin dengan perilaku yang tepat dari rsync
flag tautan simbolik.
rsync
's-a
bendera termasuk-l
bendera (yaitu 'menyalin symlink sebagai symlink'). Apakah ini hanya berarti itu akan menyalin tautan atau bahwa ia akan mengikuti tautan dan menyalin semua yang ada di direktori tautan-ke? Saya ingin menghindarinya karena saya memiliki tautan ke direktori yang penuh dengan file media yang akan melibatkan penyalinan ratusan gigabyte saya tidak perlu membuat cadangan.- Khawatir (tetapi tidak pasti) yang
rsync -a
akan menyalin semua file media itu, saya malah menambahkan--no-links
bendera. Ini sepertinya bukan perilaku yang saya inginkan. Itu hanya mengabaikan menyalin tautan apa pun yang bermasalah karena saya memiliki tautan yang ingin saya salin (mis. Tautan ke file header umum dari berbagai direktori proyek). - Dengan asumsi # 1 di atas (tanpa
--no-links
bendera) adalah yang benar-benar saya inginkan dan itu hanya menyalin tautan tanpa menyalin file yang ditautkan, apakah tautan akan putus saat dicadangkan? Sebagai contoh saya dapatrsync
mencari direktori/home/me/projects/misc
ke/media/extdrive/backup/home/me/projects/misc
. Dalam hal ini saya anggaprsync
tidak cukup pintar juga tidak mencoba untuk memperbaiki konten symlink untuk perubahan direktori relatif. Apakah ini benar? Ini tidak apa-apa, tidak masalah jika tautannya rusak di direktori cadangan selama mereka akan diperbaiki dan berfungsi jika tiba saatnya ketika mereka perlu dipulihkan.
linux
rsync
symbolic-link
sean
sumber
sumber
Jawaban:
"Salin symlinks sebagai symlinks" berarti persis seperti yang dikatakannya: Jika rsync melihat symlink di direktori sumber, itu akan membuat symlink identik di tujuan. Tidak ada lagi.
(Beberapa baris di halaman manual, opsi yang berbeda
--copy-links
,, menjelaskan perilaku yang berlawanan (selalu menyalin data) yang Anda gambarkan sebagai tidak diinginkan.)Lihat juga bagian "Tautan simbolik":
Ini bukan perilaku yang Anda inginkan karena Anda salah menafsirkan apa yang
--links
dilakukan dan karena itu meminta perilaku yang salah (lihat jawaban # 1).Secara default, ini menyalin tujuan dengan tepat.
Yaitu, jika tautan menunjuk ke jalur absolut (misalnya
/home/me/projects
), tautan akan terus mengarah ke jalur yang sama; itu tidak akan rusak , itu hanya akan terus menunjuk ke file di direktori home Anda daripada yang ada di cadangan Anda.Sementara itu, jika tautan menunjuk ke jalur relatif (mis.
../../projects
), Tautan juga akan terus mengarah ke jalur yang sama, tetapi karena relatif terhadap lokasi symlink, symlink di cadangan Anda juga akan menunjuk ke sebuah file di cadangan Anda.Sayangnya sepertinya tidak ada pilihan untuk menerjemahkan symlink absolut untuk basis baru mereka (hanya opsi untuk menghancurkan mereka sepenuhnya). Untuk menghindari masalah, Anda harus mengubah symlink yang ada menjadi yang relatif (yang merupakan ide bagus umumnya, untuk tautan di dalam $ HOME).
sumber
--copy-links
dan--links
?--copy-links
=-L
, dan--links
=-l
. Lihat deskripsi dari dokumentasi dalam jawaban saya di sini: superuser.com/a/1388910/425838@grawity memiliki jawaban yang bagus, tetapi inilah tangkapan layar dari beberapa info yang relevan dari dokumentasi. Inilah kata-kata
-l
dan-L
opsi yang tepat, misalnya, yang tampaknya paling relevan dalam pertanyaan:Sumber: https://linux.die.net/man/1/rsync , atau
man rsync
halaman manual di Linux.Perhatikan juga bahwa opsi
-a
(--archive
) juga menyertakan-l
opsi di dalamnya, yang luar biasa, karena saya sangat suka menggunakan-l
opsi untuk melestarikan symlink saya dari sumber sebagai symlink di tujuan. Dari halaman manual:Catatan, untuk
rsync
perintah dan instruksi favorit saya , termasuk menyalin, membuat mirroring, menampilkan kemajuan total ...... melakukan dry run, mencatat stderr dan stdout ke file (terpisah), memperlihatkan statistik, menggunakan file path include dan file kecualikan , dll, lihat jawaban lengkap saya di sini di bagian 2, berjudul " 2. rsync Command-line alat (Linux, Windows dengan Cygwin) ": https://superuser.com/a/1464264/425838
sumber