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

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

Ich möchte den Inhalt aller Unterverzeichnisse eines bestimmten Stammverzeichnisses synchronisieren, aber nur einige Dateien im Stammverzeichnis selbst. Dazu möchte ich alle Dateien mit der ignoreDirektive ignorieren (alle Unterverzeichnisse behalten) und die wenigen Dateien, die ich behalten möchte, mit der Direktive erneut hinzufügen ignorenot. Dazu habe ich die folgenden beiden Dinge versucht:

  1. Ich füge einen regulären Ausdruck hinzu, um alle Einträge im Stammverzeichnis auszuschließen, die einen Schrägstrich enthalten, indem ich sie ignore = Regex ^(?!.*\/).*$zu meinem Profil hinzufüge. Dies führt jedoch zu einer Fehlermeldung wie der folgenden ohne weitere Erklärung:

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

Es scheint ein ganz einfaches Problem zu sein, aber ich komme nicht dahinter.

Antwort1

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 erkennen, aber Unison verweist nicht anders auf sie (z. B. indem es Verzeichnissen ein Präfix voranstellt /oder so etwas), sodass ein Benutzer das Muster mit dem einen oder dem anderen vergleichen kann. Wenn Sie beispielsweise ein Verzeichnis mit dem Namen deerund eine Datei mit dem Namen philunter dem Stammverzeichnis synchronisieren ROOT, sieht Unison sie mit dem Namen

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 die Verzeichnisse, die synchronisiert werden sollen, manuell an, indem Sie path = deerfür jedes Verzeichnis eine Zeile zu Ihrem Profil hinzufügen. Ich denke, das ist sowieso die Standardmethode, um Unison zu konfigurieren. Dann können Sie alle Dateien in Ihrem Stammverzeichnis, die ebenfalls synchronisiert werden sollen, beispielsweise eine Datei mit dem Namen , in ein Verzeichnis philverschieben, das wie folgt synchronisiert wird , und dann einphildeer/synced-root-files/symbolischer Linkvon dieser Datei zurück in Ihr Stammverzeichnis

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil
    
  2. Erfinden Sie eine Namenskonvention für Ihr Stammverzeichnis, mit der Sie Muster vergleichen können. Benennen Sie zum Beispiel alle und nur die Dateien, die Sienichtmöchten etwas wie synchronisieren ignore.philund Ihrem Unison-Profil eine Zeile hinzufügen ignore = Path ignore.*.

Hier ist ein Link zumPfadangabeUndPfade ignorierenAbschnitte des Unison-Handbuchs, damit zukünftige Leser es leicht finden können.

verwandte Informationen