So schließen Sie einen Ordner von rsync aus

60

Ich versuche, meinen privaten Ordner auf meinem NAS-Laufwerk zu sichern. Ich gebe das:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ [email protected]:LinuxHome

Woher rsync-exclude.txtkommt dieser Inhalt:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

und es befindet sich in demselben Ordner, in dem ich rsync (home folder) ausführe.

Der rsync versucht jedoch auch diesen Ordner zu kopieren.

Was mache ich falsch?

xpanta
quelle

Antworten:

88

Sie geben absolute Pfade in Ihrer Ausschlussliste an.

Mit rsync werden alle Ausschlusspfade (oder Einschlusspfade!), Die mit beginnen, /an der " Wurzel der Übertragung " verankert .

Die Wurzel der Übertragung ist in diesem Fall /home/chris. Wenn du. .. getan hast:

rsync -Paz --exclude-from 'rsync-exclude.txt' / [email protected]:

... dann sollten Ihre Ausschlüsse funktionieren (aber Sie würden alles andere auf dieses Dateisystem kopieren !).

Da Sie jedoch nur versuchen, Ihr Home- Verzeichnis zu synchronisieren , und es kein Unterverzeichnis mit dem /home/chrisNamen gibt "home/chris/Downloads", wird rsyncnichts gefunden, das mit diesem übereinstimmt.

Versuchen Sie also, die /home/chrisTeile aus Ihrer rsync-exclude.txtDatei zu entfernen .

Eigentlich sollten Sie nur eine einzige Zeile in der Datei benötigen:

/Downloads

Beachten Sie, dass, wenn Sie den führenden nicht angeben /und zufällig andere Verzeichnisse benannt haben "Downloads", diese ebenfalls ausgeschlossen werden. Ich gehe davon aus, dass Sie nur Ihr "Top-Level" -Verzeichnis (relativ zum Quellverzeichnis, auch als "Root of Transfer" bezeichnet) ausschließen Downloadsmöchten, also möchten Sie das führende Verzeichnis /.

DER EINFACHSTE WEG (um nur einige Wege auszuschließen)

Wenn Sie nur ein Verzeichnis ausschließen müssen, tun Sie dies einfach (unter Vermeidung einer separaten Datei):

rsync -Paz --exclude /Downloads /home/chris/ [email protected]:LinuxHome

Sie können --excludeTags auch wie folgt verketten:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ [email protected]:LinuxHome

Beachten Sie, dass, da es keinen Schrägstrich gibt, dieser .hiddenFilevon jedem kopierten Verzeichnis ausgeschlossen wird!

Aber wenn Sie mehr als ein paar Ausschlüsse haben, sind Sie mit --exclude-fromund einer Datei besser dran .

Hinweis

Ich sehe, dass Sie es richtig verstanden haben, aber diejenigen, die rsync noch nicht kennen, sollten den Schrägstrich am Ende von beachten/home/chris/

Um die rsyncManpage zu zitieren : "Sie können sich ein abschließendes / in einer Quelle als" Kopieren des Inhalts dieses Verzeichnisses "und nicht als" Kopieren des Verzeichnisses nach Namen "vorstellen."

Wenn Sie also diesen abschließenden Schrägstrich weglassen, erhalten Sie ein Verzeichnis, das chrisim Zielverzeichnis aufgerufen wird und das alles enthält/home/chris (außer Downloadsnatürlich das Originalverzeichnis !).

Lambart
quelle
2

Dies ist möglicherweise für die Augen einfacher, und nur ein Hinweis zum Ausschließen von Verzeichnissen und der Syntax:

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

Diese Verzeichnisse und alle darin enthaltenen Dateien werden ausgeschlossen. Aus irgendeinem Grund hat rysnc / home / username nicht an /.cache angehängt. Nur home / würde sich verankern, also musste ich jedem ausgeschlossenen Verzeichnis / username hinzufügen.

In den Manpages heißt es: "Wenn das Muster mit einem / beginnt, ist es an einer bestimmten Stelle in der Hierarchie der Dateien verankert, andernfalls wird es mit dem Ende des Pfadnamens abgeglichen." Diese Hierarchie scheint jedoch nur das erste Verzeichnis im Quellverzeichnis zu sein. Ich benutze Bash, Version 4.4.23 (1) -Release.

jltrinchard
quelle