Je voudrais rsync
d'un ordinateur local au serveur. Sur un répertoire qui n'existe pas, et je veux que rsync
crée d'abord ce répertoire sur le serveur.
Comment puis je faire ça?
Si vous avez plus que le dernier répertoire feuille à créer, vous pouvez exécuter un fichier 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 proposée 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 vous retrouverez avec/pre_existing/dir/new/x/y/z /
Et si vous voulez avoir "y/z /" créé, mais pas dans "nouveau/x /", vous pouvez ajouter ./
où tu veux --relative
pour commencer:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
créerait/pre_existing/dir/y/z /.
En supposant que vous utilisiez ssh pour vous connecter à rsync, pourquoi ne pas envoyer une commande ssh avant:
ssh user@server mkdir -p existingdir/newdir
s'il existe déjà, rien ne se passe
Le -R, --relative
option le fera.
Par exemple: si vous voulez sauvegarder /var/named/chroot
et créez la même structure de répertoires sur le serveur distant, puis -R
fera exactement cela.
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 à m'inquiéter d'avoir un répertoire vide qui traîne.
Je ne pense pas que vous puissiez le faire avec une 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 d'abord créer en tant que répertoire temporaire).
C'est un peu un bidouillage, mais ça marche pour moi.
à votre santé
Chris
Cette réponse utilise un peu d'autres réponses, mais j'espère que les choses seront un peu plus claires. Vous n'avez jamais spécifié ce que vous récuriez: une seule entrée de répertoire ou plusieurs fichiers.
Supposons donc que vous déplacez une entrée du répertoire source, et pas seulement 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 sous celle-ci. Tu as data/
sur votre machine cible mais pas 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 ne déplacez que des fichiers et que vous ne déplacez pas l'entrée de répertoire qui les contient, procédez comme suit:
rsync -rvv /path/to/data/myappdata/*.txt user@Host:/remote/path/to/data/myappdata/
et il créera le répertoire myappdata
sur lequel vous pourrez placer vos fichiers sur la machine distante. Encore une fois, le fichier data/
répertoire doit exister sur la machine distante.
Incidemment, mon utilisation de -rvv
_ flag a pour but d’obtenir une sortie doublement verbeuse afin d’indiquer clairement ce qu’elle fait, ainsi que le comportement récursif nécessaire.
Juste pour vous montrer ce que je reçois en utilisant rsync (3.0.9 sur Ubuntu 12.04)
$ 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
J'espère que cela clarifie un peu cette question.
par exemple:
à partir de: /xxx/a/b/c/d/e/1.html
à: utilisateur @ distant: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd/xxx/a/& rsync -auvR b/c/d/e/utilisateur @ distant:/pre_existing/dir /