В исходном каталоге у меня есть несколько символических ссылок. Эти ссылки указывают на некоторые пути, и данные также присутствуют по этим путям; но используя rsync, он копирует только файлы ссылок, а не данные, которые находятся по этому пути.
-L, --copy-links преобразовать символическую ссылку в соответствующий файл/каталог
Ответ или решение
Если вы хотите использовать rsync для копирования фактических данных вместо символических ссылок, вы можете воспользоваться параметром -L или --copy-links. Этот параметр позволяет rsync преобразовывать символические ссылки (symlinks) в соответствующие им файлы или каталоги. В этом ответе мы обсудим, как это сделать на практике, и приведем пример использования.
Пример использования rsync с параметром -L
Предположим, у вас есть каталог /source, содержащий несколько символических ссылок, которые ссылаются на различные файлы и каталоги, и вы хотите скопировать их содержимое в каталог /destination. В этом случае вам следует использовать следующую команду:
rsync -avL /source/ /destination/
Параметры команды:
-a: архивный режим, который включает в себя множество опций, таких как рекурсивное копирование и сохранение прав доступа.
-v: включить подробный вывод для отслеживания процесса копирования.
-L: копирует данные, на которые ссылаются символические ссылки, вместо самих ссылок.
Как работает -L:
Когда вы используете -L, rsync проходит по всем файлам и каталогам в исходном каталоге и заменяет каждую символическую ссылку её реальным содержимым. Это позволяет избежать проблем с отсутствующими файлами или недоступными каталогами, на которые ссылаются ссылки, поскольку будет скопировано именно то, к чему они указывают.
Важно помнить:
Наличие данных: Убедитесь, что файлы, на которые ссылаются символические ссылки, действительно существуют. Если ссылки ведут на недоступные пути, вы можете столкнуться с ошибками или неполными копиями.
Права доступа: При использовании -a rsync попытается сохранить права доступа к файлам и каталогам, что может потребовать соответствующих прав пользователя.
Символические ссылки: Если вы сознательно хотите скопировать и саму символическую ссылку, вам следует использовать опцию -l (или --links), которая сохраняет ссылки как есть.
Заключение
Использование параметра -L в rsync является простым и эффективным способом копирования фактических данных вместо символических ссылок. Это особенно полезно в ситуациях, когда необходимо синхронизировать содержимое каталогов и избежать потери данных из-за неразрешённых ссылок. Убедитесь, что перед выполнением команды у вас есть необходимые права доступа и что все данные доступны по указанным путям.