
Angenommen, ich habe die folgende Struktur auf dem Pfadorigin_path
origin_path/X=1/A/...
origin_path/X=1/B/...
origin_path/X=1/C/...
...
origin_path/X=2/A/...
origin_path/X=2/B/...
origin_path/X=2/C/...
...
...
Ich möchte die obige Struktur unter einem anderen Pfad namens replizieren destination_path
, abernureinschließlich der Pfade zu den VerzeichnissenBüber.
Mit anderen Worten, ich möchte Folgendes erreichen beidestination_path
destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...
Zur Klarstellung: Einige Teile dieser Struktur sind möglicherweise bereits im Zielpfad vorhanden (z. B. die Ordner destination_path/X=*
).
So wie ich es verstehe, könnten Filter dank @Gilles‘ Kommentar rsync
hierfür gut geeignet sein. Ich habe sie jedoch noch nie zuvor verwendet und es fällt mir etwas schwer, das inRsync-Filter: nur ein Muster kopierenzu meiner Situation.
In welcher Reihenfolge sollte ich in meinem Fall Dinge einschließen oder ausschließen? Und wie weise ich rsync an, origin_path
und destination_path
als globale Pfade zu verwenden? (anstatt Dinge mit relativen Pfaden kopieren zu lassen)
Antwort1
Das Folgende sollte das gewünschte Ergebnis liefern:
rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/
Die erste Regel schließt alle Verzeichnisse ein (sonst würde rsync nicht in die obersten Verzeichnisse hinabsteigen). Die zweite Regel schließt alles in Unterverzeichnissen der Kategorie „B“ ein. Die dritte Regel schließt alles andere aus. Die --prune-empty-dirs
Option ignoriert leere Verzeichnisse (da wir mit der ersten Regel alle Verzeichnisse einschließen).