Nie trzeba tego robić rsync
, ale byłoby miło nie pisać scenariusza, aby to zrobić, i rsync
jest bardzo blisko tego, czego chcę.
rsync -a
(lub -l
) może zachować dowiązania symboliczne i -L
może wyrejestrować dowiązania symboliczne i skopiować je tak, jakby to był normalny plik / katalog. Czy można jednak zachować dowiązanie symboliczne, a także skopiować pliki / katalogi, do których prowadzą łącza?
Oto przykład. Powiedzmy, że mamy tę hierarchię folderów:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
a kiedy to zrobię rsync -aR dirA dest
(lub coś innego), chciałbym, aby dokładnie te pojawiały się w dest
:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
Czy to jest możliwe rsync
? Dziękuję Ci.
Załóżmy, że dowiązania symboliczne posiadające bezwzględną ścieżkę lub wskazujące na zewnątrz katalogu źródłowego mogą zostać zignorowane.
dirA/link
jest dowiązaniem symbolicznym do../dirB/file
, to powinno to być traktowane jako kopiowaniedirB/file
dodest/dirB/file
idirA/link
dodest/dirA/link
. Co jeślidirA/link
jest link do../../another_file
? Co się dzieje, jeślidirA/link
wskazuje na katalog znajdujący się wyżej w drzewie katalogów?a -> b
,b -> c/foo
,c -> d/e
: żądanie kopiaa
powinny również kopiowaćb
,c
,c/foo
,d
,d/e
id/e/foo
).Odpowiedzi:
Jeśli znasz nazwę dowiązania symbolicznego i chcesz przenieść link i cel , możesz:
Pierwsze
rsync
transfery tylkosymlink
. Drugie polecenie znajduje prawdziwą nazwę katalogu, a drugiersync
przenosi zawartość katalogu.źródło
Byłoby to możliwe, gdyby tylko wszyscy byli w „mydir” i mielibyście synchronizować „mydir” z jednego miejsca do drugiego. Rsync nie jest w stanie kopiować poza podaną ścieżką (z wyjątkiem poniższych łączy). na przykład
źródło