Это не должно быть сделано rsync
, но было бы неплохо написать сценарий для этого, и rsync
это очень близко к тому, что я хочу.
rsync -a
(или -l
) может сохранять символические ссылки и -L
может разыменовывать символические ссылки и копировать их, как если бы это был обычный файл / каталог. Однако возможно ли сохранить символическую ссылку, а также скопировать файлы / каталоги, на которые указывает ссылка?
Вот пример. Скажем, у нас есть эта иерархия папок:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
и когда я делаю rsync -aR dirA dest
(или что-то еще), я хотел бы, чтобы именно это появилось в dest
:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
Это возможно с rsync
? Спасибо.
Давайте предположим, что символические ссылки, имеющие абсолютный путь или указывающие на внешний каталог, могут быть проигнорированы.
dirA/link
есть символическая ссылка на../dirB/file
, то это обрабатывалось как копированиеdirB/file
вdest/dirB/file
иdirA/link
вdest/dirA/link
. Что делать, еслиdirA/link
ссылка на../../another_file
? Что происходит в общем случае, еслиdirA/link
указывает на каталог, который находится выше в дереве каталогов?a -> b
,b -> c/foo
,c -> d/e
: запрос на копиюa
должна также скопироватьb
,c
,c/foo
,d
,d/e
иd/e/foo
).Ответы:
Если вы знаете имя символической ссылки и хотите передать ссылку и цель, вы можете:
Первая
rsync
передача всегоsymlink
. Вторая команда находит реальное имя каталога, а втораяrsync
передает содержимое каталога.источник
Это было бы возможно, если и только если бы вы все были в «mydir», и вы должны были «rysync» mydir из одного места в другое. Rsync не может копировать вне указанного вами пути (за исключением следующих ссылок). например
источник