на server1: / dir1 - это символическая ссылка на dir2
на server2: / dir1 - это каталог с собственным содержимым
Я хочу использовать rsync, чтобы сделать server2: / dir1 символической ссылкой на dir2, как и на server1.
Если я сделаю это на server1:
rsync -azvs --delete /dir1 user@server2:/dir1
то я действительно получаю новую (сломанную) символическую ссылку на server2:
/dir1/dir1 -> dir2
(поэтому он копирует символическую ссылку в существующий каталог / dir1 вместо ее замены)
Могу ли я вместо этого заставить rsync попирать существующий каталог / dir1 с помощью символической ссылки?
редактировать: Я думал, что указанная выше команда будет работать из-за этого комментария в man для rsync под --copy-dirlinks
раздел:
Без этой опции, если отправляющая сторона заменила каталог символической ссылкой на каталог, принимающая сторона удалит все, что находится на пути новой символической ссылки, включая иерархию каталогов (пока --force или --delete действует).
Однако поведение выглядит одинаково с и без --force
, и с и без -k
.
Проблема в том, что вы указываете /dir1
как пункт назначения. Вам нужно подняться на один уровень.
rsync -azvs --delete /dir1 user@server2:/
Я не понимаю, зачем вам использовать Rsync для создания символической ссылки на том же сервере. Возможно, я неправильно понимаю ваш вопрос, но если вы хотите сделать символическую ссылку внутри server2 с источником в / dir2 и ссылку в / dir1, вам нужно просто запустить: ln -s /dir2 /dir1
.
На всякий случай, как указано в другом ответе и расширении проблемы с вашей линией.
Разбираем вашу команду:
rsync -azvs --delete /dir1 user@server2:/dir1
Вы выполняете rsync, режим архива (рекурсивный, владелец, группа, включая символические ссылки как символические ссылки, среди прочего), сжатие, подробный и без разделения пространства:
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-z, --compress compress file data during the transfer
-v, --verbose increase verbosity
-s, --protect-args no space-splitting; wildcard chars only
Кроме того, вы удаляете различия в пунктах назначения:
--delete delete extraneous files from dest dirs
Тогда вы используете в качестве источника /dir1
, что означает весь каталог, а не только его содержимое (поскольку в конце отсутствует косая черта "/").
И пункт назначения user@server2:/dir1
, учитывая / dir1 была символической ссылкой, и вы использовали -a
флаг для архива, вы копируете символическую ссылку внутри корня / dir1, заканчивая этим:
server2:/dir1/dir1