Antworten:
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.
&&
?
Angenommen, Sie verwenden ssh, um rsync zu verbinden, und senden Sie vorher einen ssh-Befehl:
ssh user@server mkdir -p existingdir/newdir
Wenn es bereits existiert, passiert nichts
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 eine rsync
Verbindung zum rsync 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.
/./
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:
rsync /dev/null node:existing-dir/new-dir/
Ich bekomme diese Nachricht:
skipping non-regular file "null"
Aber ich muss mir keine Sorgen machen, dass ein leeres Verzeichnis herumhängt.
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:
rsync --recursive emptydir/ destination/newdir
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
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 haben data/
auf Ihrem Zielcomputer aber nein data/myappdata/
- das ist einfach genug:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
Sie können sogar einen anderen Namen für das Remote-Verzeichnis verwenden:
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
Wenn Sie nur einige Dateien verschieben und den Verzeichniseintrag, der sie enthält, nicht verschieben, gehen Sie wie folgt vor:
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
und es wird das myappdata
Verzeichnis für Sie auf dem Remotecomputer erstellt, in dem Sie Ihre Dateien ablegen können. Auch hier muss das data/
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)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
Hoffe das klärt das ein wenig auf.
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
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.