Wie ignoriert man bei Unison alle Dateien, aber keine Unterverzeichnisse?

395
soriak

Ich möchte den Inhalt aller Unterverzeichnisse eines bestimmten Stammverzeichnisses synchronisieren, jedoch nur einige Dateien im Stammverzeichnis. Um dies zu tun, möchte ich alle Dateien ignorieren, die die ignoreDirektive verwenden (alle Unterverzeichnisse beibehalten) und die wenigen Dateien, die ich mit der ignorenotDirektive behalten möchte, erneut hinzufügen . Dazu habe ich folgende zwei Dinge ausprobiert:

  1. Hinzufügen eines regulären Ausdrucks zum Ausschließen von Einträgen im Stammverzeichnis, die einen Schrägstrich enthalten, durch Hinzufügen ignore = Regex ^(?!.*\/).*$zu meinem Profil. Dies führt jedoch zu einer Fehlermeldung ohne weitere Erklärung:

    Malformed pattern "Regex ^(?!.*\/).*$"." 
  2. Zuerst alles ignorieren ignore = Name ?*und dann jeden Pfad erneut hinzufügen, der einen Schrägstrich enthält ignorenot = Path */*, der nicht wie erwartet funktioniert hat, da das Ignorieren von Verzeichnissen nicht funktioniert.

Es scheint ein sehr einfaches Thema zu sein, aber ich kann mich nicht damit auskennen.

2

1 Antwort auf die Frage

0
Mike Pierce

Es scheint, dass es nicht möglich ist, genau das zu tun, was Sie möchten. Wenn Unison eine Datei mit einem Verzeichnis synchronisiert, kann Unison den Unterschied zwischen den beiden unterscheiden, aber Unison bezieht sich nicht anders auf sie (z. B. durch das Voranstellen eines /Verzeichnisses oder etwas anderes ), sodass ein Benutzer mit einem Muster übereinstimmen kann oder der andere. Wenn Sie beispielsweise ein Verzeichnis mit dem Namen deerund eine Datei philunter dem Stammverzeichnis synchronisieren ROOT, werden diese von Unison als bezeichnet

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

Sie können nicht zwischen ROOT/deerund unterscheiden ROOT/phil. Hier sind jedoch einige Vorschläge

  1. Geben Sie manuell die Verzeichnisse an, die Sie synchronisieren möchten, indem path = deerSie für jedes Verzeichnis eine Zeile zu Ihrem Profil hinzufügen . Ich denke, das ist die Standardmethode, um Unison sowieso zu konfigurieren. Für alle Dateien in Ihrem Stammverzeichnis, die ebenfalls synchronisiert werden sollen, beispielsweise eine Datei mit dem Namen phil, können Sie philin ein Verzeichnis wechseln, das synchronisiert wird, deer/synced-root-files/und dann einen symbolischen Link aus dieser Datei wieder in Ihr Stammverzeichnis einfügen

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil 
  2. Erfassen Sie eine Namenskonvention in Ihrem Stammverzeichnis, mit der Sie eine Übereinstimmung herstellen können. Benennen Sie beispielsweise alle und nur die Dateien, die Sie nicht synchronisieren möchten ignore.phil, und fügen Sie Ihrem Unison-Profil eine Zeile hinzu ignore = Path ignore.*.

Hier ist ein Link auf die Pfadangabe und Ignorieren Paths Abschnitte des Unison Handbuch so zukünftige Leser leicht finden können.