it-swarm.com.de

rsync: Wie kann ich es konfigurieren, um ein Zielverzeichnis auf dem Server zu erstellen?

Ich möchte rsync vom lokalen Computer zum Server. In einem Verzeichnis, das nicht existiert, und ich möchte, dass rsync dieses Verzeichnis zuerst auf dem Server erstellt.

Wie kann ich das machen?

124
ufk

Wenn Sie mehr als das letzte zu erstellende Blattverzeichnis haben, können Sie entweder zuerst ein separates ssh ... mkdir -p Ausführen oder den --rsync-path - Trick als hier erklärt :

rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source [email protected]:/tmp/x/y/z/

Oder verwenden Sie die von Tony vorgeschlagene Option --relative. In diesem Fall geben Sie nur das Stammverzeichnis des Ziels an, das vorhanden sein muss, und nicht die Verzeichnisstruktur der Quelle, die erstellt werden soll:

rsync -a --relative /new/x/y/z/ [email protected]:/pre_existing/dir/

Auf diese Weise erhalten Sie/pre_existing/dir/new/x/y/z /

Und wenn Sie möchten, dass "y/z /" erstellt wird, aber nicht in "new/x /", können Sie ./ An der Stelle hinzufügen, an der --relative Beginnen soll:

rsync -a --relative /new/x/./y/z/ [email protected]:/pre_existing/dir/

würde/pre_existing/dir/y/z/erstellen.

130
mivk

Angenommen, Sie verwenden ssh, um rsync zu verbinden, was ist, wenn Sie vorher einen ssh-Befehl senden:

ssh [email protected] mkdir -p existingdir/newdir

wenn es bereits existiert, passiert nichts

32
Alfredo Yong

Die Option -R, --relative Erledigt dies.

Zum Beispiel: Wenn Sie /var/named/chroot Sichern und dieselbe Verzeichnisstruktur auf dem Remote-Server erstellen möchten, wird -R Genau das tun.

14
Tony

das hat bei mir geklappt:

 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.

13
kdubs

Ich glaube nicht, dass Sie dies mit einem einzigen rsync-Befehl tun können, aber Sie können das zusätzliche Verzeichnis zunächst 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 hacken, aber es funktioniert für mich.

prost

Chris

4
Chris Dennis

In dieser Antwort werden einige andere Antworten verwendet, aber die Umstände werden hoffentlich 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 lokales Verzeichnis mit dem Namen data/myappdata/ und Sie haben eine Menge Unterverzeichnisse darunter. Du hast data/ auf Ihrem Zielcomputer, aber kein data/myappdata/ - das ist einfach genug:

rsync -rvv /path/to/data/myappdata/ [email protected]:/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 [email protected]:/remote/path/to/data/newdirname

Wenn Sie nur einige Dateien verschieben und den darin enthaltenen Verzeichniseintrag nicht verschieben, gehen Sie wie folgt vor:

rsync -rvv /path/to/data/myappdata/*.txt [email protected]:/remote/path/to/data/myappdata/

und es wird das myappdata -Verzeichnis für Sie auf dem entfernten Rechner erstellt, in das Sie Ihre Dateien ablegen können. Wiederum wird das data/ Verzeichnis muss auf dem entfernten Rechner existieren.

Übrigens meine Verwendung von -rvv flag dient dazu, eine doppelt ausführliche Ausgabe zu erhalten, damit klar ist, was es tut und welches rekursive Verhalten erforderlich ist.

Nur um dir zu zeigen, was ich bei der Verwendung von rsync (3.0.9 unter Ubuntu 12.04) bekomme

$ rsync -rvv *.txt [email protected]:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
[email protected]'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.

3
Mandible79

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 -auvRb/c/d/e/user @ remote:/pre_existing/dir /

2
Montage