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

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

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

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

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

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

решение1

Похоже, что невозможно сделать именно то, что вы хотите. Когда Unison синхронизирует файл с каталогом, Unison может отличить их друг от друга, но Unison не ссылается на них по-разному (например, добавляя префикс a /к каталогам или что-то в этом роде) таким образом, чтобы пользователь мог сопоставлять их по шаблону с одним или другим. Например, если вы синхронизируете каталог с именем 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, чтобы будущие читатели могли легко его найти.

Связанный контент