rsync mit absoluten Pfaden und ohne Unterpfade

rsync mit absoluten Pfaden und ohne Unterpfade

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 rsynchierfü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_pathund destination_pathals 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-dirsOption ignoriert leere Verzeichnisse (da wir mit der ersten Regel alle Verzeichnisse einschließen).

verwandte Informationen