![Wie ignoriert man mit Unison alle Dateien, aber keine Unterverzeichnisse?](https://rvso.com/image/1568326/Wie%20ignoriert%20man%20mit%20Unison%20alle%20Dateien%2C%20aber%20keine%20Unterverzeichnisse%3F.png)
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 ignore
Direktive 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:
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 ^(?!.*\/).*$"."
Zuerst alles mit ignorieren
ignore = Name ?*
und dann jeden Pfad, der einen Schrägstrich enthält, mit erneut hinzufügenignorenot = 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 deer
und eine Datei mit dem Namen phil
unter dem Stammverzeichnis synchronisieren ROOT
, sieht Unison sie mit dem Namen
new dir ----> ROOT/deer
new file ----> ROOT/phil
Sie können nicht zwischen ROOT/deer
und unterscheiden ROOT/phil
. Hier sind jedoch einige Vorschläge
Geben Sie die Verzeichnisse, die synchronisiert werden sollen, manuell an, indem Sie
path = deer
fü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 Verzeichnisphil
verschieben, das wie folgt synchronisiert wird , und dann einphil
deer/synced-root-files/
symbolischer Linkvon dieser Datei zurück in Ihr Stammverzeichniscd ROOT; ln -s ROOT/deer/synced-root-files/phil
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.phil
und Ihrem Unison-Profil eine Zeile hinzufügenignore = Path ignore.*
.
Hier ist ein Link zumPfadangabeUndPfade ignorierenAbschnitte des Unison-Handbuchs, damit zukünftige Leser es leicht finden können.