Itu tidak perlu dilakukan rsync
, tapi alangkah baiknya tidak harus menulis skrip untuk melakukan ini, dan rsync
sangat dekat dengan apa yang saya inginkan.
rsync -a
(atau -l
) dapat menyimpan symlink, dan -L
dapat men-decereferensi symlink dan menyalinnya seolah-olah itu adalah file / dir yang normal. Namun, mungkinkah menyimpan symlink, dan juga menyalin file / direktori yang ditunjuk oleh tautan?
Ini sebuah contoh. Katakanlah kita memiliki hierarki folder ini:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
dan ketika saya melakukannya rsync -aR dirA dest
(atau sesuatu yang lain), saya ingin memiliki persis ini muncul di dest
:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
Apakah ini mungkin rsync
? Terima kasih.
Mari kita asumsikan symlink yang memiliki path absolut atau menunjuk ke luar direktori sumber dapat diabaikan.
dirA/link
symlink adalah../dirB/file
, maka ini harus ditangani sebagai menyalindirB/file
kedest/dirB/file
dandirA/link
kedest/dirA/link
. Bagaimana jikadirA/link
ada tautan ke../../another_file
? Apa yang terjadi, secara umum, jikadirA/link
menunjuk ke direktori yang lebih tinggi di pohon direktori?a -> b
,b -> c/foo
,c -> d/e
: permintaan untuk copya
juga harus menyalinb
,c
,c/foo
,d
,d/e
dand/e/foo
).Jawaban:
Jika Anda tahu nama symlink dan ingin mentransfer tautan dan target Anda dapat:
rsync
Transfer pertama hanyasymlink
. Perintah kedua menemukan nama direktori asli, dan yang keduarsync
mentransfer konten direktori.sumber
Ini akan mungkin jika dan hanya jika Anda semua berada di 'mydir' dan Anda harus rsync 'mydir' dari satu tempat ke tempat lain. Rsync tidak dapat menyalin di luar jalur yang Anda berikan (dengan pengecualian tautan berikut). misalnya
sumber