Es scheint eine Menge SF- und SO-Fragen zu geben, aber keine scheint meinen Anforderungen zu entsprechen.
source_dir/
some_dir/
another_dir/
some_file.php
some_other_file.txt
include_this_dir/
include_that_dir/
yet_another_dir/
Ich möchte also zwei dieser Verzeichnisse synchronisieren und den Rest ausschließen. Es ist wichtig, dass wir alle außer diesen beiden Verzeichnissen ausschließen, da möglicherweise andere Dateien zu einem späteren Zeitpunkt zum Quellverzeichnis hinzugefügt werden und ausgeschlossen werden müssten, ohne explizit aufgeführt zu werden.
Ich habe es versucht:
rsync -av --dry-run --delete --exclude="source_dir/*" (or just "*") --include-from="include.txt" source_dir dest_dir
Und meine include.txt hatte
include_this_dir/
include_that_dir/
und ich habe auch versucht hinzuzufügen
source_dir/
Keine Freude. Es wird überhaupt nichts aufgenommen.
Antworten:
Ein einfacher Filter sollte den Trick machen. So bauen Sie auf der vorherigen Antwort mit einem geeigneten Beispiel auf: Geben Sie explizit die übergeordneten Elemente sowie alle (**) Unterordner und Dateien an. Dann alles andere ausschließen. Hier ist
filter.txt
:Mit der Kommandozeile:
Würde ergeben zu:
quelle
+ /include_this_dir/***
, was bedeutet+ /include_this_dir/ + /include_this_dir/**
Um aus dem
rsync
manuellen Abschnitt zu zitierenFILTER RULES
:Daher ist es möglicherweise die beste Option, Ihre Filterregeln aus einer Datei zu lesen und entsprechend zu sortieren. Beispiel:
Sie können die Filterregeldatei mit dem
--filter=
Parameter angeben .quelle
Neue Befehlszeichenfolge, die - eingeschlossene Verzeichnisse erstellt und deren Inhaltsverzeichnis und / oder Dateien kopiert, jedoch NUR 2 DIRS DEEP. Warum?
Dies funktioniert für mich von der Workstation zum Server und sichert (rysnc) meine persönliche Site auf einem anderen Server zusätzlich zum gesamten Verzeichnis mit allen Sites, wenn das übergeordnete Element rysnc ist. / Inet \ Publishing (das 'n' in -avin ist 'Trockenlauf', entfernen.).
Das --exclude * / ist alle anderen Verzeichnisse in 'Inet Publishing /' und muss anscheinend After --include per man rsync process order sein (wenn vor --include, dann ist Everything --excluded und es werden keine weiteren Token verarbeitet , zumindest habe ich es so gelesen und in der Praxis Trockenläufe gemacht, wenn ich darauf gekommen bin.).
Dies ist eigentlich eine Zeile aus einem meiner Skripte, die ich mit cron ausführe. * offensichtlich kann der Zielhost eine IP sein, ich habe die Hosts in / etc / hosts definiert und habe SSH-Schlüsselpaare ,,, also benutze ich den Hostnamen.
rsync -avin --progress ~ / MyDocuments / 'Inet Publishing' / --include = 'LandisTwo (2019)' --include = 'LandisTwo (2020) {backup}' --exclude = '* /' e6420: / home / landis / Media / 2TBackup / Backups / MyDocuments / | tee -a ~ / logs / Backup-InetPublishing_2020.txtquelle