
Angenommen, ich habe ein Verzeichnis auf einem lokalen Computer hinter einer Firewall:
local:/home/meee/workdir/
Und ein Verzeichnis auf einem Remotecomputer auf der anderen Seite der Firewall:
remote:/a1/a2/.../aN/one/two/
remote:/a1/a2/.../aN/one/dont-copy-me{1,2,3,...}/
...so dass N
>= 0.
Auf meinem lokalen Computer befindet sich ein Skript, das verwendet . Ich möchte, dass dieses Skript nur vom Remotecomputer für eine variable, aber bekannte „N“ rsync
kopiert, sodass ich am Ende Folgendes erhalte:one/two/
local:/home/meee/workdir/one/two/
Wenn ich verwende rsync remote:/a1/a2/.../aN/one/two/ ~/workdir/
, erhalte ich Folgendes:
local:/home/meee/workdir/two/
Wenn ich verwende rsync --relative remote:/a1/a2/.../aN/one/two/ ~/workdir/
, erhalte ich Folgendes:
local:/home/meee/workdir/a1/a2/.../aN/one/two/
Keines von beidem ist das, was ich will.
- Gibt es
rsync
Flaggen, die das gewünschte Ergebnis erzielen können? - Wenn nicht, fällt jemandem eine einfache Lösung ein?
Antwort1
Für -- relative müssen Sie einen Punkt in den Quellverzeichnispfad einfügen:
rsync -av --relative remote:/a1/a2/.../aN/./one/two ~/workdir/
Siehe Handbuch:
-R, --relative
[...]
Es ist auch möglich, die Menge an Pfadinformationen zu begrenzen, die als implizite Verzeichnisse für jeden von Ihnen angegebenen Pfad gesendet werden. Mit einem modernen rsync auf der sendenden Seite (ab 2.6.7) können Sie einen Punkt und einen Schrägstrich in den Quellpfad einfügen, wie folgt:
rsync -avR /foo/./bar/baz.c remote:/tmp/
Antwort2
Wenn Sie Dateien von einer älteren Version als v2.6.7 abrufen , können Sie dies tun, indem Sie die Option rsync
von nutzen , mit der Sie angeben können, wo der rsync-Befehl auf der Remote-Remote zu finden ist. Sie können sie jedoch auch verwenden, um zuerst das Verzeichnis zu wechseln. Einfach:rsync
--rsync-path
rsync -aR --rsync-path='cd /a1/a2/.../aN/ && rsync' remote:one/two/ ~/workdir/