GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rsync-Ausschlussoption zum Ausschließen von Verzeichnis kann nicht abgerufen werden

mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d 

Das funktioniert. Als test/a das Basisverzeichnis ist, aus dem synchronisiert wird, wird das Ausschlussmuster angegeben, indem mit a/ begonnen wird

Zeigen Sie uns die wahren Pfade/Ausschlüsse, wenn dies nicht hilft.

Das Ausführen von rsync mit -vn listet Verzeichnisse/Dateien auf - das Muster wird mit dem Format abgeglichen, das rsync druckt.


Beides würde funktionieren:

rsync -nvraL test/a test/dest --exclude=/a/b/c/d
rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Beachten Sie die Endung / im Quellpfad macht einen entscheidenden Unterschied zu --exclude angegeben werden soll. Dies setzt voraus, dass wir Folgendes haben:

mkdir -p test/a/b/c/d/e
mkdir -p test/a/other/place/a/b/c/d
mkdir -p test/dest

Der Originalbeitrag hat Schwierigkeiten, wenn der Ausschlusspfad mit einem / beginnt . Daniels Antwort ist richtig, dass dieser anfängliche / in Ausschlusspfad kann wünschenswert sein, um einen bestimmten Pfad auszuschließen, und dass dieser anfängliche / sollte als vorangestellte ^ verstanden werden in regulären Ausdrücken. Seine Antwort enthält jedoch einen kritischen Tippfehler bezüglich der Endung / im Quellpfad.


Nach Eriks Beispiel möchten Sie dies tun:

rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Tatsächlich ist weder Eriks noch Antonis Antwort ganz richtig.

Erik hat damit halbwegs recht

Da test/a das Basisverzeichnis ist, aus dem synchronisiert wird, wird das Ausschlussmuster angegeben, indem mit a/

begonnen wird

Es stimmt, dass der Stamm des Ausschlussmusters ist test/a (also das Muster /some/path bindet an test/a/some/path ), aber das ist nicht die ganze Geschichte.

Aus der Manpage:

Wenn das Muster mit einem / beginnt, ist es an einer bestimmten Stelle in der Dateihierarchie verankert, andernfalls wird es mit dem Ende des Pfadnamens abgeglichen. Dies ähnelt einem führenden ^ in regulären Ausdrücken. Somit würde „/foo“ mit einer Datei namens „foo“ entweder im „Stammverzeichnis der Übertragung“ (für eine globale Regel) oder im Verzeichnis der Zusammenführungsdatei (für eine verzeichnisbezogene Regel) übereinstimmen.

Wir können per-directory ignorieren weil es hier nicht auf uns zutrifft.

Daher rsync -nvraL test/a test/dest --exclude=a/b/c/d schließt definitiv test/a/b/c/d aus (und Kinder), aber es schließt auch test/a/other/place/a/b/c/d aus .

rsync -nvraL test/a test/dest --exclude=/b/c/d hingegen schließt nur aus test/a/b/c/d (und Kinder) (test/a ist der Punkt, an dem / verankert ist).

Aus diesem Grund benötigen Sie immer noch den verankernden Schrägstrich am Anfang, wenn Sie diesen bestimmten Pfad ausschließen möchten nicht gesichert werden. Dies mag wie ein kleines Detail erscheinen, und es wird so sein, je spezifischer Ihr Ausschlussmuster wird (z. B. Pictures vs. home/daniel/Pictures ), aber es könnte passieren, dass es dich in den Hintern beißt.


Linux
  1. So schließen Sie bestimmte Verzeichnisse vom Kopieren in Linux aus

  2. Rsync:Wie verschiebt man absolute Symlinks?

  3. Rsync Unbekannte Option von der Bash-Skriptausführung?

  4. Rsync mit Löschoption, aber Gelöschtes beibehalten?

  5. 6 rsync-Beispiele zum Ausschließen mehrerer Dateien und Verzeichnisse mit Exclude-From

So verwenden Sie rsync zum Ausschließen von Dateien und Verzeichnissen bei der Datenübertragung

So schließen Sie Dateien und Verzeichnisse mit Rsync aus

Können wir die Speicherzuweisung einheitentesten?

rsync und symbolische Links

Wie kann ich Dateien standardmäßig mit rsync ausschließen?

Rsync-Befehlsprobleme, Eigentümer- und Gruppenberechtigungen ändern sich nicht