Как вы игнорируете все файлы, но не подкаталоги с Unison?
Я хочу синхронизировать содержимое всех подкаталогов данного корня, но только несколько файлов в самом корне. Для этого я хотел бы игнорировать все файлы, используя ignore
директива (сохраняя все подкаталоги) и повторно добавляя несколько файлов, которые я хочу сохранить с ignorenot
директивы. Для этого я попробовал следующие две вещи:
Добавление регулярного выражения для исключения любой записи в корне, содержащей косую черту, путем добавления
ignore = Regex ^(?!.*\/).*$
в мой профиль. Но это приводит к появлению следующего сообщения об ошибке без дальнейшего объяснения:Malformed pattern "Regex ^(?!.*\/).*$"."
Сначала игнорируя все с
ignore = Name ?*
а затем повторно добавить каждый путь, который содержит косую черту сignorenot = Path */*
, который не работал, как ожидалось, так как игнорирование каталогов не работает таким образом.
Кажется, это очень простая проблема, но я не могу разобраться с этим.
1 ответ
Похоже, что невозможно сделать именно то, что вы хотите. Когда Unison синхронизирует файл с каталогом, Unison может определить разницу между ними, но Unison не обращается к ним по-разному (например, с помощью префикса /
в каталоги или что-то) таким образом, чтобы пользователь мог сопоставить шаблон с одним или другим. Например, если вы синхронизируете каталог с именем deer
и файл с именем phil
под корнем ROOT
Унисон видит их по имени
new dir ----> ROOT/deer
new file ----> ROOT/phil
Вы не можете различить ROOT/deer
а также ROOT/phil
, Вот некоторые предложения, хотя
Укажите вручную каталоги, которые вы хотите синхронизировать, добавив строку
path = deer
в ваш профиль для каждого каталога. Я думаю, что это стандартный способ настроить Unison в любом случае. Затем для любых файлов в корневом каталоге, которые вы хотите синхронизировать, скажем, файл с именемphil
, вы можете двигатьсяphil
в каталог, который синхронизируется какdeer/synced-root-files/
а затем добавить символическую ссылку из этого файла обратно в корневой каталогcd ROOT; ln -s ROOT/deer/synced-root-files/phil
Придумайте соглашение об именах в вашем корневом каталоге, с которым вы можете сопоставить шаблон. Например, назовите все и только файлы, которые вы не хотите синхронизировать, что-то вроде
ignore.phil
и добавьте строку в свой профиль Unisonignore = Path ignore.*
,
Вот ссылка на разделы " Спецификация пути" и " Игнорирование путей" в руководстве по Unison, чтобы будущие читатели могли легко найти его.