2016-12-08 2 views
-2

У меня есть несколько проектов, которые используют структуру данных дерева с большим дублированием на более низких уровнях. У меня большие файлы данных, и я хочу запускать монолитные анализы с разными наборами данных.Как заставить 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 уже делает это, я хотел бы узнать, какие ключи использовать, а не писать что-то новое.

Я ценю, что это звучит как вопрос идиот. Я буду свободно признавать, что когда я читаю страницы руководства и стараюсь, что думаю, будет работать, а это не так, я чувствую себя идиотом. Мы все были там. Когда у меня будет больше опыта, я смогу понять контекст страниц руководства. Получение этого опыта - долгая тяжелая борьба для меня. Мне нравится командная строка, я действительно это делаю, но только тогда, когда документация соответствует поведению, а угловые случаи там, где она отсутствует, помечены

ответ

0

Используйте руководство. тип man rsync

-a, --archive    archive mode; equals -rlptgoD (no -H,-A,-X) 

-l, --links     copy symlinks as symlinks 
-L, --copy-links   transform symlink into referent file/dir 
    --copy-unsafe-links  only "unsafe" symlinks are transformed 
    --safe-links   ignore symlinks that point outside the tree 
    --munge-links   munge symlinks to make them safer 

-r, --recursive    recurse into directories 
+0

Я очень ценю ваш ответ, однако я уже прочитал прекрасное руководство и попробовал переключатели -l и -L.Не могли бы вы объяснить мне смысл безопасных и небезопасных ссылок, если это имеет отношение к моей ситуации, если это тот бит, который мне не хватает, и что я должен сделать, чтобы избежать пропусков каталога, который я пытаюсь расширить. У меня есть полные права доступа к файлам, подтвержденные тем фактом, что я могу архивировать. Я только что перепробовал переключатель -L и все еще получаю сообщение об ошибке «пропуская каталог project_2» и никакого вывода. –

+0

Один переключатель '-L' означает, что ссылки преобразуются в их реальный контент. Но один '-L' не включает в себя' -r' (рекурсивный) переключатель для применения в каталогах, поэтому все каталоги будут пропущены, даже если они символические или нет. Я обновил ответ с помощью информации о переключателе '-r'. –

+0

yay -rL работает на моем примере с игрушкой. Благодарю. Поэтому я предполагаю, что -L работает с ссылками на файлы. Похоже, мне может потребоваться поэкспериментировать с -k с -r и -L, если в структуре есть папки. –

Смежные вопросы