Как вы игнорируете все файлы, но не подкаталоги с Unison?

281
soriak

Я хочу синхронизировать содержимое всех подкаталогов данного корня, но только несколько файлов в самом корне. Для этого я хотел бы игнорировать все файлы, используя ignoreдирективу (сохраняя все подкаталоги), и повторно добавляя несколько файлов, которые я хочу сохранить с ignorenotдирективой. Для этого я попробовал следующие две вещи:

  1. Добавление регулярного выражения, чтобы исключить любую запись в корне, которая содержит косую черту, добавив ignore = Regex ^(?!.*\/).*$в мой профиль. Но это приводит к появлению следующего сообщения об ошибке без дальнейшего объяснения:

    Malformed pattern "Regex ^(?!.*\/).*$"." 
  2. Сначала игнорируем все с помощью, ignore = Name ?*а затем повторно добавляем каждый путь, содержащий косую черту ignorenot = Path */*, который не работал должным образом, так как игнорирование каталогов не работает таким образом.

Кажется, это очень простая проблема, но я не могу разобраться с этим.

2

1 ответ на вопрос

0
Mike Pierce

Похоже, что невозможно сделать именно то, что вы хотите. Когда Unison синхронизирует файл с каталогом, Unison может определить разницу между ними, но Unison не обращается к ним по-разному (например, путем добавления префикса /к каталогам или чего-то еще) таким образом, чтобы пользователь мог сопоставить шаблон с одним или другой. Например, если вы синхронизируете каталог с именем deerи файлом с именем philпод корнем ROOT, Unison увидит их с именем как

new dir ----> ROOT/deer new file ----> ROOT/phil 

Вы не можете различить ROOT/deerи ROOT/phil. Вот некоторые предложения, хотя

  1. Укажите вручную каталоги, которые вы хотите синхронизировать, добавив строку path = deerв свой профиль для каждого каталога. Я думаю, что это стандартный способ настройки Unison в любом случае. Затем для любых файлов в вашем корневом каталоге, которые вы также хотите синхронизировать, скажем, файл с именем phil, вы можете перейти philв каталог, который будет синхронизироваться, deer/synced-root-files/и затем добавить символическую ссылку из этого файла обратно в ваш корневой каталог.

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil 
  2. Придумайте соглашение об именовании в вашем корневом каталоге, с которым вы можете сопоставить шаблон. Например, назовите все и только файлы, которые вы не хотите синхронизировать ignore.phil, и добавьте строку в свой профиль Unison ignore = Path ignore.*.

Вот ссылка на разделы « Спецификация пути» и « Игнорирование путей» в руководстве по Unison, чтобы будущие читатели могли легко найти его.

Похожие вопросы