Wie kann ich eine Teilmenge von Dateien aus einem Verzeichnis kopieren und dabei die Ordnerstruktur beibehalten?

8

Ich möchte eine Teilmenge von Dateien von dirA nach dirB verschieben (sagen wir Dateien mit "blah" im Dateinamen), aber ich möchte, dass alle verschachtelten Verzeichnisse am neuen Speicherort gleich sind. Wie kann ich das machen?

cstack
quelle
Mögliches Duplikat des Rsync-Filters: Kopieren nur eines Musters
Gilles 'SO - hör auf böse zu sein'

Antworten:

9

Die Magie der rsyncFilterregeln:

$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest

Auf der rsyncManpage finden Sie Details zu Filterregeln. Hier ist jedoch die komprimierte Version für diesen speziellen Bedarf.

--filter="+ */" bedeutet "alles einschließen, was ein Verzeichnis ist"

--filter="-! *blah* bedeutet "alles ausschließen, was blah NICHT im Dateinamen enthält"

pdo
quelle
3

Wenn Sie diese Dateien kopieren müssen, reicht cp aus:

cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB

Option --parentsbehält Unterverzeichnisse bei - es wird der vollständige Verzeichnispfad für das Ziel erstellt.

Joanna Kotuła
quelle
Die Syntax hier ist viel klarer als bei rsync
Matěj Šmíd
0

Das hat bei mir funktioniert:

rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" [email protected]:/source/directory/ /destination/directory/

Der -eSwitch definiert das rsyncÜbertragungsprotokoll mit dem Port als -p 22. Außerdem sind die abschließenden /Schrägstriche wichtig, damit das Programm weiß, dass es sich um Verzeichnisse handelt.

Danke @pdo für die zusätzlichen Stunden an meinem Arbeitstag!

Kambiz
quelle