Ich kann anscheinend keine Dokumente finden, wie die Syntax der Ausschlussdatei analysiert wird.
dh unterstützt es Wildcards? Regex? Wie unterscheidet es zwischen Dateien und Verzeichnissen? werden Pfadpräfixe benötigt? woher (cwd/oder root?)?
Einige Beispiele:
.qiv-trash (directory that could be anywhere on the filesystem)
.DS_Store
lost+found/
._*
desktop.ini
Thumbs.db (file that could be anywhere on the filesystem)
.Trash-* (the asterisk could be any number, is it needed?)
.tmp$ (file ending in .tmp)
~$ (file ending in a tilde)
~/.cache/ (cache directory in user home dir, using tilde syntax)
/full/path/to/directory/.syncthing/index*
Hallo, hast du gesehen?
Muster verwenden intern filepath.Glob, Syntax siehe filepath.Match. ** schließt zusätzlich beliebige Unterverzeichnisse aus. Umgebungsvariablen in Exclude-Dateien werden mit os.ExpandEnv erweitert.
in https://github.com/restic/restic/blob/master/doc/manual.rst?
Ich denke, das sollte deine Fragen beantworten.
Ich bin in die Dokumentation unter https://restic.readthedocs.io/en/latest/manual.html gegangen und habe nach ausschließen gesucht, wo es leider keine gängigen Beispiele enthält (oder einen Verweis auf die andere Dokumentation unter manual.rst .). ) :/
Ich habe das Golang-Dokument gelesen und ich denke, der Endbenutzer (ich!) wird nicht wissen, was restic einen Ausschluss mit intern vergleicht - ist es der vollständige Pfad (zB /home/me/blah) oder ein Pfad von der Repository-Root (/blah oder blah) oder relativ zum cwd (me/blah wenn ich in /home bin)?
Vielen Dank, dass Sie dieses Thema angesprochen haben, ich denke, Sie haben einen gültigen Punkt. Das Handbuch sollte die Ausschlussfilter erklären, ohne auf godoc.org zu verweisen, und es sind weitere Beispiele erforderlich.
Um schon einige deiner Fragen zu beantworten:
--exclude foo
alle Dateien und Verzeichnisse mit dem Namen foo
. Das gleiche gilt für --exclude foo/
.Aus Ihrer Ausschlussdatei:
._*
wird mit allen Dateien und Verzeichnissen übereinstimmen, deren Name mit einem Punkt und einem Unterstrich beginntdesktop.ini
desktop.ini
genau mit allen Dateien mit dem Namen desktop.ini.bak
wird also nicht ausgeschlossen und im Snapshot gespeichert..Trash-*
schließt Dateien/Verzeichnisse mit den Namen .Trash-
, .Trash-foobar
usw. aus..tmp$
schließt alle Dateien/Verzeichnisse aus, die wörtlich .tmp$
, das ist ein Punkt, gefolgt von tmp
, gefolgt von einem Dollarzeichen. Keine Regexp-Erweiterung.~$
schließt alle Dateien/Verzeichnisse aus, die wörtlich Tilde-Dollar heißen. Um alle Dateien/Verzeichnisse auszuschließen, die mit einer Tilde enden, verwenden Sie *~
.~/.cache
schließt das Verzeichnis .cache
in allen Verzeichnissen namens tilde aus. Um das Cache-Verzeichnis nur in Ihrem Home-Verzeichnis auszuschließen, verwenden Sie $HOME/.cache
(Tilde wird nicht erweitert, Umgebungsvariablen sind, sondern nur in einer Datei, die über --exclude-file
gelesen wird, in der Befehlszeile wird die Shell erweitert beide)./full/path/to/directory/.syncthing/index*
schließt alle Dinge aus, deren Namen mit index
unter /full/path/to/directory/.syncthing
.Danke @fd0
Mit "aktuelles Verzeichnis" meinen Sie also nicht das Verzeichnis, in dem ich mich befand, als ich das Backup gestartet habe, sondern das Verzeichnis, in dem sich derzeit die Dateien befinden (abgesehen von Ausschlüssen, die mit einem Schrägstrich beginnen). Ich habs.
Das Verhalten für Dateien und Verzeichnisse ist etwas unerwartet, ich hätte erwartet, dass --exclude foo/ das Verzeichnis, aber nicht den Inhalt sichert, während --exclude foo auch nicht sichert. Ich bin mir nicht sicher, warum, von rsync, denke ich.
Meinen Beispielen fehlte ein wichtiges: Leerzeichen! Ich denke, ich muss diese und Metazeichen mit einem Backslash umgehen.
Ich habe viele davon kopiert: https://gist.github.com/jult/e2eaedad6b9e29d95977fea0ddffae7d
Sind Kommentare in der Ausschlussdatei zulässig? Bearbeiten: https://github.com/restic/restic/pull/916/commits/c796d84fca48feea91ca3e85fbf38e16f764a468 sieht aus wie ein Hash ist das Kommentarzeichen.
Ah, ich fürchte, das ist immer noch nicht ganz richtig. Ich werde beschreiben, wie restic die Ausschlussmuster auswertet. Angenommen, restic wird von einem Benutzer in seinem Home-Verzeichnis ( /home/user
) wie folgt ausgeführt:
$ restic backup --exclude='*.bak' --exclude='/home/user/secret' --exclude='extra' ~
Dann sieht restic die folgenden Befehlszeilenargumente (nach der Erweiterung durch die Shell):
["restic", "backup", "--exclude='*.bak'", "--exclude='/home/user/secret'", "--exclude='extra'", "/home/user"]
Dann beginnt es, /home/user
durchlaufen. Die folgende Liste beschreibt, was passiert, wenn die benannte Datei/das Verzeichnis angezeigt wird. restic testet immer den kompletten Pfad gegen die Muster:
/home/user/foo.bak
: Das Muster *.bak
stimmt überein und die Datei wird nicht gespeichert. Das Muster ist nicht absolut, also passt es überall für alle Dateien, die auf .bak
enden./home/user/secret
: Das absolute Muster /home/user/secret
stimmt überein, also wird das Verzeichnis nicht gespeichert und nicht durchlaufen/home/user/foo/home/user/secret
: Keine Musterübereinstimmungen, daher wird das Verzeichnis gespeichert./home/user/work/extra
: Das Muster extra
stimmt überein, das Verzeichnis wird nicht gespeichert.Ich hoffe, dass dies jetzt etwas klarer ist, ich werde dem Handbuch einen Abschnitt hinzufügen, der den Vorgang beschreibt. Der wichtigste Punkt ist, dass die Muster während des Backups anhand des vollständigen Pfads der Dateien bewertet werden. Wenn Sie also ein einzelnes Verzeichnis abgleichen möchten, verwenden Sie den vollständigen Pfad, da er sonst irgendwo mehrmals übereinstimmen kann.
Gibt es noch Fragen? :)
Ich habe weitere Fragen und schätze es sehr, dass Sie sich die Zeit nehmen, diese zu beantworten. Es ist wirklich eine Frage zur automagischen Verankerung von Mustern. Ich denke, ich kann die Antwort erraten (wir verlassen uns darauf, dass der absolute Pfad ziemlich einzigartig ist und uns das gewünschte Verhalten gibt), aber es ist am besten, zu fragen und sicher zu sein.
Würde das absolute Muster /home/user/secret
mit /home/user/secret2
übereinstimmen? (Was ist, wenn Sie es nicht wollen?)
Würde das absolute Muster /home/user/secret
mit /home/user/somemount/home/user/secret
übereinstimmen?
In beiden Fällen: Nein, das Muster wird nicht übereinstimmen.
Warum ist das so? Edit: Ich bin froh, dass es nicht so ist, aber ich verstehe nicht, warum das so ist :)
Der passende Code dort ist nach dem modelliert, was eine Shell tun würde: Wenn Sie sich fragen würden, ob die Datei /home/user/secret2
existiert, was würde ls /home/user/secret
drucken (vorausgesetzt, die Datei secret
ist nicht vorhanden)?
Formaler ausgedrückt: Wenn das Muster mit einem /
beginnt, ist es absolut und das Muster muss am Anfang des zu testenden Strings übereinstimmen, also stimmt das Muster /home/user/secret
nicht mit /home/user/somemount[...]
überein.
Sie können sich vorstellen, dass sowohl das Muster als auch der Dateipfad in ihre jeweiligen Komponenten aufgeteilt sind:
/home/user/secret
wird in [ROOT, "home", "user", "secret"]
und die Datei /home/user/somemount/home/user/secret
wird in [ROOT, "home", "user", "somemount", "home", "user", "secret"]
. Die Zeichenfolge ROOT
wird in diesem Beispiel verwendet, um das Root-Verzeichnis zu markieren. Sie sehen, dass das Muster nicht im Dateinamen enthalten ist./home/user/secret2
, die in [ROOT, "home", "user", "secret2"]
. Auch hier sehen Sie, dass das Muster nicht im Dateinamen enthalten ist./home/user/secret/secret.txt
, die in [ROOT, "home", "user", "secret", "secret.txt"]
, sieht man gleich am Anfang, dass das Muster tatsächlich im Dateinamen enthalten ist: [ROOT, "home", "user", "secret", ...]
, also stimmt das Muster überein und die Datei wird ausgeschlossen.secret/secret.txt
, das in ["secret", "secret.txt"]
. Sie können sehen, dass dieses Muster in der Liste für die Datei /home/user/secret/secret.txt
, beginnend bei Offset 3: [ROOT, "home", "user", "secret", "secret.txt"]
, also passt das Muster.Wenn Sie Platzhalter ( *
, ?
usw.) in einer Pfadkomponente haben, werden diese ebenfalls getestet. Für Ihr erstes Beispiel würde also ein Muster von /home/user/secret*
dem Pfad /home/user/secret2
.
Alle diese Beispiele sollten meiner Meinung nach im Handbuch dokumentiert sein.
Erwischt. Vielen Dank.
Sind negative Ausschlüsse ala .gitignore möglich?
sagen, ich möchte alle Inhalte in Verzeichnissen mit dem Namen .meteor ausschließen, außer dem verschachtelten Verzeichnis .meteor/local/db, könnte ich dies tun?
/etc/restic/excludes:
.meteor/
!.meteor/local/db
restic backup exclude-file=/etc/restic/excludes
Nein, das ist noch nicht implementiert.
Das Dokumentieren von Einschluss-/Ausschlussbeispielen wird in #396 verfolgt. Ich schließe dieses Thema hier.
@ fd0 i Wege versuchen ausschließen wie unter Jobs / / Jobs / / Builds / ** / Archiv Verzeichnis aus allen Verzeichnissen würde das funktionieren auszuschließen archivieren. Und ich habe mehrere solche Pfade, die ich ausschließen muss. Wenn möglich, können Sie mir den besten Weg vorschlagen, um mit dieser Art umzugehen, da ich in der Dokumentation kein Beispiel für eine solche Art finden kann
Hilfreichster Kommentar
Um schon einige deiner Fragen zu beantworten:
--exclude foo
alle Dateien und Verzeichnisse mit dem Namenfoo
. Das gleiche gilt für--exclude foo/
.Aus Ihrer Ausschlussdatei:
._*
wird mit allen Dateien und Verzeichnissen übereinstimmen, deren Name mit einem Punkt und einem Unterstrich beginntdesktop.ini
desktop.ini
genau mit allen Dateien mit dem Namendesktop.ini.bak
wird also nicht ausgeschlossen und im Snapshot gespeichert..Trash-*
schließt Dateien/Verzeichnisse mit den Namen.Trash-
,.Trash-foobar
usw. aus..tmp$
schließt alle Dateien/Verzeichnisse aus, die wörtlich.tmp$
, das ist ein Punkt, gefolgt vontmp
, gefolgt von einem Dollarzeichen. Keine Regexp-Erweiterung.~$
schließt alle Dateien/Verzeichnisse aus, die wörtlich Tilde-Dollar heißen. Um alle Dateien/Verzeichnisse auszuschließen, die mit einer Tilde enden, verwenden Sie*~
.~/.cache
schließt das Verzeichnis.cache
in allen Verzeichnissen namens tilde aus. Um das Cache-Verzeichnis nur in Ihrem Home-Verzeichnis auszuschließen, verwenden Sie$HOME/.cache
(Tilde wird nicht erweitert, Umgebungsvariablen sind, sondern nur in einer Datei, die über--exclude-file
gelesen wird, in der Befehlszeile wird die Shell erweitert beide)./full/path/to/directory/.syncthing/index*
schließt alle Dinge aus, deren Namen mitindex
unter/full/path/to/directory/.syncthing
.