Frage Wie man mehrere Verzeichnisse mit rsync ausschließt?


Ich versuche, mein Ausgangsverzeichnis mit rsync zu sichern, und ich möchte einige der Verzeichnisse ausschließen, die Junk enthalten. Ich möchte das ausdrücklich ausschließen /home/ben/.ccache und /home/ben/build. Leider war die Dokumentation für rsync eine Informationsüberlastung und beantwortete meine Frage nicht. Das habe ich ausprobiert:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

Was ist der richtige Weg?


136
2017-07-15 23:53


Ursprung


Ich wollte nur sagen, dass die Flagge a impliziert r bereits :) -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) - Populus


Antworten:


OK, ich fühle mich wirklich dumm. Bevor ich diese Frage überhaupt gestellt habe, hat mir mein Freund gezeigt, wie es geht und es ist wirklich einfach. Um mehrere Verzeichnisse auszuschließen, verwenden Sie einfach mehrere --exclude=path Schalter. Also ist mein Befehl oben richtig geschrieben wie folgt:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

178
2017-07-15 23:53



Ein absoluter Weg hat es getan nicht funktionieren für mich (das angegebene Verzeichnis wurde stillschweigend nicht ausgeschlossen), während ein Pfad relativ zum Quellverzeichnis korrekt funktionierte. Vielleicht fehlt mir etwas, aber ich wäre vorsichtig mit der Behauptung von @FreeSoftwareServers, dass absolute Pfade immer funktionieren. - Soren Bjornstad
FWIW, ein bisschen kreativ diff Verwendung kann hilfreich sein. Angenommen, Sie passen die Ausschlussflags von "Ausführen" in "Ausführen" an nas_backup.sh. Nehmen wir an, dass auch verwendet wird --dry-run. Lauf: . nas_backup.sh > dryrun.5.txt, adjust schließt aus, dann run . nas_backup.sh > dryrun.6.txt  dann diff diff dryrun.5.txt dryrun.6.txt | less   Dies zeigt Ihnen, was zwischen diesen beiden Läufen hinzugefügt / entfernt wurde. - JL Peyret
Zu Ihrer Information: Die Option -a beinhaltet -r damit -ar ist überflüssig. - David
Im Gegensatz zu dem, was FreeSoftwareServers glaubt, ist der Ausschlusspfad relativ zum Quellpfad NOT /. Dieser Kommentar ist kategorisch falsch und führt zu Fehlern, wenn Sie ihm folgen. Die beste Strategie ist es, die führenden / in Ihren Ausschlüssen wegzulassen, um diese Art von mentalen Fehler zu vermeiden. Wenn die Quelle "/ home / me" lautet und wenn Sie "/ mydir /" ausschließen, schließt dies das Verzeichnis "mydir" in "/ home / me" aus, dh "/ home / me / mydir NOT / mydir / at /" wird ausgeschlossen. Es ist bedauerlich, dass ich diesen Kommentar weder ablehnen noch bearbeiten kann, da er technisch falsch ist und in die Irre führen wird. - Lizardx
thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/... erklärt dies ganz klar, beachten Sie den Abschnitt: 4. Exclude path ist immer relativ (zum Quellpfad) - Lizardx


Wenn mehrere Verzeichnisse und / oder Dateien ausgeschlossen werden sollen, erstellen Sie eine Textdatei und verwenden Sie die Datei --exclude-from Schalter. Mache eine Datei namens exclude_me.txt und listet darin eure Ausschlüsse auf. Beispiel (/home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

Dann würde Ihr rsync ungefähr so ​​aussehen:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

Dies sind einige Informationen zu Filterregeln, die helfen können:

  • /dir/ bedeutet, dass der Stammordner ausgeschlossen wird /dir
  • /dir/* bedeutet, den Stammordner zu erhalten /dir aber nicht der Inhalt
  • dir/ bedeutet, dass Sie einen beliebigen Ordner überall dort ausschließen, wo der Name enthalten ist dir/

  • Beispiele ausgeschlossen: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf bedeutet, Dateien überspringen, die mit beginnen cf in irgendeinem Ordner innerhalb /var/spool/lpd

Siehe auch die Filterregeln Abschnitt auf der Manpage.


85
2018-05-19 15:13



Es ist wichtig das zu beachten root-VerzeichnisBedeutet die Wurzel der Übertragung nicht das Wurzelverzeichnis. - jamesdlin


Sie können auch mehrere Pfade in geschweiften Klammern ausschließen:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

58
2017-09-18 08:59



das funktioniert gut, nur nicht unter sh, nur unter bash, ich fand "den harten weg" - xor
Kein Leerzeichen nach dem Komma. Gelernt, dass der harte Weg auch - styl3r