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

Verwenden von Rsync-Optionen zum Einschließen und Ausschließen, um Verzeichnisse und Dateien nach Muster einzuschließen

Hier ist meine "Lehre einer Person das Fischen bei"-Antwort:

Die Syntax von Rsync ist definitiv nicht intuitiv, aber es lohnt sich, sie zu verstehen.

  1. Verwenden Sie zuerst -vvv um die Debug-Informationen für rsync anzuzeigen.
$ rsync -nr -vvv --include="**/file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

[sender] hiding directory 1280000000 because of pattern *
[sender] hiding directory 1260000000 because of pattern *
[sender] hiding directory 1270000000 because of pattern *

Das Schlüsselkonzept hierbei ist, dass rsync die Einschluss-/Ausschlussmuster für jedes Verzeichnis rekursiv anwendet. Sobald der erste Einschluss/Ausschluss übereinstimmt, stoppt die Verarbeitung.

Das erste Verzeichnis, das es auswertet, ist /Storage/uploads . Storage/uploads hat 1280000000/, 1260000000/, 1270000000/ Verzeichnisse/Dateien. Keiner von ihnen stimmt mit file_11*.jpg überein einschließen. Alle stimmen mit * überein ausschließen. Sie werden also ausgeschlossen und rsync endet.

  1. Die Lösung besteht darin, alle Verzeichnisse (*/ ) Erste. Dann ist die erste dir-Komponente 1260000000/, 1270000000/, 1280000000/ da sie mit */ übereinstimmen . Die nächste dir-Komponente wird 1260000000/ sein . In 1260000000/ , file_11_00.jpg stimmt mit --include="file_11*.jpg" überein , ist also enthalten. Und so weiter.
$ rsync -nrv --include='*/' --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

./
1260000000/
1260000000/file_11_00.jpg
1260000000/file_11_01.jpg
1270000000/
1270000000/file_11_00.jpg
1270000000/file_11_01.jpg
1280000000/
1280000000/file_11_00.jpg
1280000000/file_11_01.jpg

https://download.samba.org/pub/rsync/rsync.1


Das Problem ist, dass --exclude="*" besagt, dass (zum Beispiel) 1260000000/ ausgeschlossen werden soll Verzeichnis, also rsync untersucht nie den Inhalt dieses Verzeichnisses, bemerkt also nie, dass das Verzeichnis Dateien enthält, die mit Ihrem --include abgeglichen worden wären .

Ich denke, das, was Sie wollen, kommt am nächsten:

rsync -nrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(was alle Verzeichnisse und alle Dateien enthält, die mit file_11*.jpg übereinstimmen , aber keine anderen Dateien) oder vielleicht das:

rsync -nrv --include="/[0-9][0-9][0-9]0000000/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(dasselbe Konzept, aber viel wählerischer in Bezug auf die darin enthaltenen Verzeichnisse).


rsync Beispiele für Ausschlussmuster einschließen:

"*"         means everything
"dir1"      transfers empty directory [dir1]
"dir*"      transfers empty directories like: "dir1", "dir2", "dir3", etc...
"file*"     transfers files whose names start with [file]
"dir**"     transfers every path that starts with [dir] like "dir1/file.txt", "dir2/bar/ffaa.html", etc...
"dir***"    same as above
"dir1/*"    does nothing
"dir1/**"   does nothing
"dir1/***"  transfers [dir1] directory and all its contents like "dir1/file.txt", "dir1/fooo.sh", "dir1/fold/baar.py", etc...

Und eine letzte Anmerkung ist, dass Sie sich einfach nicht auf Sternchen verlassen, die am Anfang zum Bewerten von Pfaden verwendet werden; wie "**dir" (Es ist in Ordnung, sie für einzelne Ordner oder Dateien zu verwenden, aber nicht für Pfade) und beachten Sie, dass mehr als zwei Sternchen nicht für Dateinamen funktionieren.


Linux
  1. Sysadmin-Tools:Verwenden von rsync zum Verwalten von Sicherung, Wiederherstellung und Dateisynchronisierung

  2. Rsync-Filter:Nur ein Muster kopieren?

  3. Ist die Verwendung von Rsync während der Aktualisierung der Quelle sicher?

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

  5. Suchen und kopieren Sie die Datei mit Bash

Arbeiten Sie mit Linux-Diff und -Patch an einer Datei zusammen

So schließen Sie Dateien und Verzeichnisse mit Rsync aus

So kopieren Sie Dateien und Verzeichnisse unter Linux

So sichern Sie Dateien und Verzeichnisse mit Rsync unter Linux

Gute Kombination aus Befehlszeile und grafischem Dateibrowser?

Verwalten Sie Verzeichnis- und Dateiberechtigungen mit chmod Recursive