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

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

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

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

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

1 ответ

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

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, чтобы будущие читатели могли легко найти его.

Другие вопросы по тегам