Ich möchte rsync
vom lokalen Computer zum Server. In einem Verzeichnis, das nicht existiert, und ich möchte rsync
dieses Verzeichnis zuerst auf dem Server erstellen.
Wie kann ich das machen?
Wenn Sie mehr als das zuletzt zu erstellende Blattverzeichnis haben, können Sie entweder zuerst ein separates Verzeichnis ausführen ssh ... mkdir -p
oder den hier beschriebenen --rsync-path
Trick anwenden :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
Oder verwenden Sie die --relative
von Tony vorgeschlagene Option. In diesem Fall geben Sie nur das Stammverzeichnis des Ziels an, das vorhanden sein muss, und nicht die Verzeichnisstruktur der Quelle, die erstellt wird:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
Auf diese Weise erhalten Sie / pre_existing / dir / new / x / y / z /
Und wenn Sie "y / z /" erstellen möchten, aber nicht in "new / x /", können Sie hinzufügen, ./
wo Sie --relative
beginnen möchten :
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
würde / pre_existing / dir / y / z / erstellen.
mkdir
, also verwende ich den Hack:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
Er erstellt eine zusätzliche Datei, die Sie jedoch später entfernen können.&&
?Angenommen, Sie verwenden ssh, um rsync zu verbinden, und senden Sie vorher einen ssh-Befehl:
Wenn es bereits existiert, passiert nichts
quelle
rsync
insofern gültig, als sie das fehlende Zielverzeichnis auf dem Server erstellt ... aber nicht mit daher keiner Antwort.ssh
nicht unterstützt wird und einersync
Verbindung zumrsync daemon
Remote-Ende hergestellt wird.Die
-R, --relative
Option wird dies tun.Beispiel: Wenn Sie
/var/named/chroot
dieselbe Verzeichnisstruktur auf dem Remote-Server sichern und erstellen möchten,-R
tun Sie genau das.quelle
/./
des Quellpfads erstellt werden soll. Siehe Manpage für Details.rsync
Verzeichnisse werden nicht automatisch erstellt, wenn keine Zielordner vorhanden sind. Seufzer.--relative
. Es könnte nicht tun, was Sie denken.--relative
in Verbindung mit/./
ist das, wonach die meisten Neulinge suchen werden.rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
kopiert den Inhalt des Desktops auf den Zieldesktop. Ich weiß nicht, wie sich Unterschiede in den Benutzernamen darauf auswirken können.das hat bei mir funktioniert:
Ich bekomme diese Nachricht:
Aber ich muss mir keine Sorgen machen, dass ein leeres Verzeichnis herumhängt.
quelle
Ich glaube nicht, dass Sie dies mit einem rsync-Befehl tun können, aber Sie können das zusätzliche Verzeichnis zuerst wie folgt vorab erstellen:
Dabei ist 'Emptydir' ein lokales leeres Verzeichnis (das Sie möglicherweise zuerst als temporäres Verzeichnis erstellen müssen).
Es ist ein bisschen wie ein Hack, aber es funktioniert für mich.
Prost
Chris
quelle
rsync /dev/null node:existing-dir/new-dir/
Vorschlag oben.Diese Antwort verwendet Teile anderer Antworten, aber hoffentlich sind die Umstände etwas klarer. Sie haben nie angegeben, was Sie synchronisieren - einen einzelnen Verzeichniseintrag oder mehrere Dateien.
Nehmen wir also an, Sie verschieben einen Quellverzeichniseintrag und nicht nur die darin enthaltenen Dateien.
Angenommen, Sie haben ein lokal aufgerufenes Verzeichnis
data/myappdata/
und darunter eine Menge Unterverzeichnisse. Sie habendata/
auf Ihrem Zielcomputer aber neindata/myappdata/
- das ist einfach genug:Sie können sogar einen anderen Namen für das Remote-Verzeichnis verwenden:
Wenn Sie nur einige Dateien verschieben und den Verzeichniseintrag, der sie enthält, nicht verschieben, gehen Sie wie folgt vor:
und es wird das
myappdata
Verzeichnis für Sie auf dem Remotecomputer erstellt, in dem Sie Ihre Dateien ablegen können. Auch hier muss dasdata/
Verzeichnis auf dem Remotecomputer vorhanden sein.Im Übrigen verwende ich
-rvv
flag, um eine doppelt ausführliche Ausgabe zu erhalten, damit klar ist, was es tut und welches rekursive Verhalten erforderlich ist.Nur um Ihnen zu zeigen, was ich bei Verwendung von rsync bekomme (3.0.9 unter Ubuntu 12.04)
Hoffe das klärt das ein wenig auf.
quelle
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
aber was er auf dem Ziel erstellt hat, ist / remote / path / to / data / myappdata / myappdata /rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
z.B:
von: /xxx/a/b/c/d/e/1.html
an: user @ remote: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd / xxx / a / && rsync -auvR b / c / d / e / user @ remote: / pre_existing / dir /
quelle