Question rsync: comment puis-je le configurer pour créer un répertoire cible sur le serveur?


J'aimerais rsync de l'ordinateur local au serveur. Sur un répertoire qui n'existe pas, et je veux rsync pour créer ce répertoire sur le serveur en premier.

Comment puis je faire ça?


97
2017-10-28 12:16


origine


Réponses:


Si vous avez plus que le dernier répertoire de feuilles à créer, vous pouvez soit exécuter un ssh ... mkdir -p d'abord, ou utilisez le --rsync-path astuce comme expliqué ici :

rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/

Ou utilisez le --relative option comme suggéré par Tony. Dans ce cas, vous ne spécifiez que la racine de la destination, qui doit exister, et non la structure de répertoires de la source, qui sera créée:

rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/

De cette façon, vous allez vous retrouver avec / pre_existing / dir / new / x / y / z /


96
2018-04-07 09:26



En supposant que vous utilisez ssh pour connecter rsync, qu'en est-il de l'envoi d'une commande ssh avant:

ssh user@server mkdir -p existingdir/newdir

s'il existe déjà, rien ne se passe


29
2018-04-23 00:22



le -R, --relative option fera cela.

Par exemple: si vous voulez sauvegarder /var/named/chroot et créer la même structure de répertoire sur le serveur distant, puis -R fera exactement cela.


14
2017-07-28 11:19



cela a fonctionné pour moi:

 rsync /dev/null node:existing-dir/new-dir/

Je reçois ce message:

skipping non-regular file "null"

mais je n'ai pas à me soucier d'avoir un répertoire vide qui traîne.


13
2018-03-14 17:57



Je ne pense pas que vous puissiez le faire avec une seule commande rsync, mais vous pouvez d'abord créer le répertoire supplémentaire comme ceci:

rsync --recursive emptydir/ destination/newdir

où 'emptydir' est un répertoire vide local (que vous devrez peut-être créer en premier en tant que répertoire temporaire).

C'est un peu un bidouillage, mais ça marche pour moi.

à votre santé

Chris


4
2018-06-15 13:42



Cette réponse utilise des morceaux d'autres réponses, mais j'espère que cela sera un peu plus clair quant aux circonstances. Vous n'avez jamais spécifié ce que vous vouliez lancer - une seule entrée de répertoire ou plusieurs fichiers.

Supposons donc que vous déplacez une entrée de répertoire source et que vous ne déplacez pas simplement les fichiers qu'elle contient.

Disons que vous avez un répertoire appelé localement data/myappdata/ et vous avez une charge de sous-répertoires en dessous. Tu as data/ sur votre machine cible mais non data/myappdata/ - c'est assez facile:

rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata

Vous pouvez même utiliser un nom différent pour le répertoire distant:

rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname

Si vous déplacez simplement des fichiers sans déplacer l’entrée de répertoire qui les contient, vous feriez:

rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/

et il va créer le myappdata répertoire pour vous sur la machine distante pour placer vos fichiers. Encore une fois, le data/ Le répertoire doit exister sur la machine distante.

Incidemment, mon utilisation de -rvv flag permet d'obtenir une sortie doublement verbeuse, ce qui explique clairement son rôle, ainsi que le comportement récursif nécessaire.

Juste pour vous montrer ce que j'obtiens en utilisant rsync (3.0.9 sur 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

J'espère que cela élimine un peu cela.


3
2018-01-14 15:26



par exemple:

de: /xxx/a/b/c/d/e/1.html

à: user @ remote: /pre_existing/dir/b/c/d/e/1.html

rsync:

cd / xxx / a / && rsync -auvR b / c / d / e / utilisateur @ remote: / pre_existing / rep /


1
2018-04-07 06:50