Я хочу создать теневой каталог каталога D. Теневой каталог D1 должен иметь ту же структуру, что и D, но не должен разделять какие-либо узлы с D. Каждый файл в D должен быть представлен символической ссылкой на этот файл в D1. Идея состоит в том, что операции с D1 никогда не должны изменять D, поэтому я могу свободно удалять что-либо в D1, не затрагивая D. Как я могу этого добиться? Я, конечно, мог бы сделать простую древовидную копию D, но это сделало бы дубликаты файлов.
[Следующее было перемещено из комментария.] Вот чего я хочу добиться. У меня есть несколько музыкальных файлов в разных местах. Я могу создать единый каталог D, содержащий символические ссылки на все из них. Я планирую создать теневой каталог D1, который изначально содержит копии символических ссылок D. Когда я проигрываю музыку, я удаляю ее узлы из D1, так что D1 содержит только указатели на музыку, которую я не играл (на разных уровнях в D). Между тем моя оригинальная музыкальная библиотека не изменилась. Я понимаю, что могут быть и другие способы добиться того же, но этот метод конструктивно прост и требует только стандартного программирования оболочки.
Помимо использования ln
, вы также можете создавать символические ссылки на файлы с помощью cp
, используя флаг -s
. Это полезно, потому что это все еще работает с флагами -r
и -a
, что означает, что вы можете клонировать все дерево символических ссылок, от D до D1.
Для правильной работы D должен быть абсолютным путем или преобразован в него с помощью $ (realpath D)
.
Собираем все вместе:
cp -asT "$(realpath D)" D1
Для ясности, редактирование файлов в D1 все равно изменит оригиналы в D, но ссылки в D1 можно безопасно удалить.