Je voudrais rsync
d'un ordinateur local au serveur. Sur un répertoire qui n'existe pas, et je veux rsync
d'abord créer 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 soit en exécuter un autre ssh ... mkdir -p
, soit utiliser l' --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 l' --relative
option suggéré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 créer "y / z /", mais pas dans "new / x /", vous pouvez ajouter ./
où vous voulez --relative
commencer:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
créerait / préexistant / dir / y / z /.
mkdir
, donc j'utilise le hack:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
il crée un fichier supplémentaire mais vous pouvez le supprimer plus tard.&&
?En supposant que vous utilisez ssh pour connecter rsync, qu'en est-il d'envoyer une commande ssh avant:
s'il existe déjà, rien ne se passe
la source
rsync
, par conséquent, aucune réponse.ssh
n'est pas prise en charge et sersync
connecte à l'rsync daemon
extrémité distante.L'
-R, --relative
option le fera.Par exemple: si vous souhaitez sauvegarder
/var/named/chroot
et créer la même structure de répertoires sur le serveur distant-R
, vous le ferez exactement.la source
/./
du chemin source. Voir la page de manuel pour plus de détails.rsync
ne créera pas de répertoires automatiquement si les dossiers cibles n'existent pas. Soupir.--relative
. Cela pourrait ne pas faire ce que vous pensez.--relative
en conjonction avec/./
c'est ce que la plupart des débutants recherchent.rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
copiera le contenu du bureau sur le bureau cible. Je ne sais pas comment les différences de noms d'utilisateur peuvent affecter cela.cela a fonctionné pour moi:
Je reçois ce message:
mais je n'ai pas à m'inquiéter d'avoir un répertoire vide qui traîne.
la source
Je ne pense pas que vous puissiez le faire avec une seule commande rsync, mais vous pouvez d'abord `` pré-créer '' le répertoire supplémentaire comme ceci:
où 'emptydir' est un répertoire local vide (que vous devrez peut-être d'abord créer comme répertoire temporaire).
C'est un peu un hack, mais ça marche pour moi.
à votre santé
Chris
la source
rsync /dev/null node:existing-dir/new-dir/
suggestion ci-dessus.Cette réponse utilise des fragments d'autres réponses, mais j'espère que ce sera un peu plus clair quant aux circonstances. Vous n'avez jamais spécifié ce que vous étiez en train de rsynchroniser - une seule entrée de répertoire ou plusieurs fichiers.
Supposons donc que vous déplaciez une entrée de répertoire source, et pas seulement les fichiers qu'elle contient.
Disons que vous avez un répertoire appelé localement
data/myappdata/
et que vous avez une charge de sous-répertoires en dessous. Vous avezdata/
sur votre machine cible mais nondata/myappdata/
- c'est assez simple:Vous pouvez même utiliser un nom différent pour le répertoire distant:
Si vous ne faites que déplacer certains fichiers et ne déplacez pas l'entrée de répertoire qui les contient, vous feriez:
et il créera le
myappdata
répertoire pour vous sur la machine distante pour y placer vos fichiers. Encore une fois, ledata/
répertoire doit exister sur la machine distante.Incidemment, mon utilisation de l'
-rvv
indicateur est d'obtenir une sortie doublement verbeuse afin que ce soit clair sur ce qu'il fait, ainsi que sur le comportement récursif nécessaire.Juste pour vous montrer ce que j'obtiens en utilisant rsync (3.0.9 sur Ubuntu 12.04)
J'espère que cela clarifie un peu cela.
la source
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
mais ce qu'elle a créé sur la cible est / remote / path / to / data / myappdata / myappdata /rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
par exemple:
depuis: /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 / user @ remote: / pre_existing / dir /
la source