У меня есть несколько проектов, которые используют структуру данных дерева с большим дублированием на более низких уровнях. У меня большие файлы данных, и я хочу запускать монолитные анализы с разными наборами данных.Как заставить rsync заменить символические ссылки на реальные данные?
Я могу организовать их с помощью относительных символических ссылок, это отлично работает для моих программ анализа, и я нахожу rsync -a, который отлично работает, чтобы скопировать всю структуру «как есть» на устройство резервного копирования.
Например, с минимальной конфигурацией, как ...
projects/
project_1/
code_1
data -> ../common_data/data_c
project_2/
code_2
data -> ../common_data/data_b
common_data/
data_a
data_b
data_c
относительные ссылки указывают на правильные места, и если я делаю
rsync -a projects/ projects_backup_path/
тогда вся структура будет передан в резервное копирование и все еще можно просматривать и снова перемещаться, что хорошо.
Я также хочу иногда давать полный проект кому-то еще, и для этого мне нужно восстановить его с реальными данными вместо символических ссылок.
Если я хочу поставить Project_2 на палочке, в том числе всех данных, я хотел бы быть в состоянии напечатать что-то вроде
rsync --replace-links-with-data project_2 stick
и в конечном итоге со следующей структурой на моей флешке
project_2/
code_2
data_b
Из-за чтения страниц руководства и вопросов здесь и в другом месте по поводу rsync, кажется, что для этого предназначены переключатели -K, -L или -k или -kL.
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
...
-k, --copy-dirlinks transform symlink to dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
Однако, когда я пытаюсь копия с этим, я получаю «пропуска каталога хого» сообщение, и никакой передачи не происходит. Относительное местоположение xxx зависит от моего текущего каталога, когда я запускаю rsync, но это всегда абсолютное местоположение цели project_x, которую я пытаюсь расширить. Что мне не хватает?
Возможно, связанный с этим вопрос. Как я могу понять, что не работает? Я все еще Linux noob.
Я знаю, что есть разные способы упорядочить мои проекты, код и данные, но это подходит мне и моим клиентам на данный момент. Я знаю, что есть другие способы «реализовать» ссылки, например, я мог бы легко написать скрипт python для выполнения этой работы. Однако, если rsync уже делает это, я хотел бы узнать, какие ключи использовать, а не писать что-то новое.
Я ценю, что это звучит как вопрос идиот. Я буду свободно признавать, что когда я читаю страницы руководства и стараюсь, что думаю, будет работать, а это не так, я чувствую себя идиотом. Мы все были там. Когда у меня будет больше опыта, я смогу понять контекст страниц руководства. Получение этого опыта - долгая тяжелая борьба для меня. Мне нравится командная строка, я действительно это делаю, но только тогда, когда документация соответствует поведению, а угловые случаи там, где она отсутствует, помечены
Я очень ценю ваш ответ, однако я уже прочитал прекрасное руководство и попробовал переключатели -l и -L.Не могли бы вы объяснить мне смысл безопасных и небезопасных ссылок, если это имеет отношение к моей ситуации, если это тот бит, который мне не хватает, и что я должен сделать, чтобы избежать пропусков каталога, который я пытаюсь расширить. У меня есть полные права доступа к файлам, подтвержденные тем фактом, что я могу архивировать. Я только что перепробовал переключатель -L и все еще получаю сообщение об ошибке «пропуская каталог project_2» и никакого вывода. –
Один переключатель '-L' означает, что ссылки преобразуются в их реальный контент. Но один '-L' не включает в себя' -r' (рекурсивный) переключатель для применения в каталогах, поэтому все каталоги будут пропущены, даже если они символические или нет. Я обновил ответ с помощью информации о переключателе '-r'. –
yay -rL работает на моем примере с игрушкой. Благодарю. Поэтому я предполагаю, что -L работает с ссылками на файлы. Похоже, мне может потребоваться поэкспериментировать с -k с -r и -L, если в структуре есть папки. –