J'utilise scp pour copier un répertoire d'un serveur distant vers un nouveau répertoire (IE changeant juste le nom) sur un autre serveur distant comme:
scp -prq server1:dir1 server2:dir2
Cela fonctionne bien si dir2 n'existe pas sur server2, il crée un nouveau répertoire appelé dir2 qui contient tout de dir1 sur server1.
Le problème survient lorsque dir2 existe déjà sur server2 (REMARQUE: je n'ai aucun moyen de le savoir à l'avance ou de faire un retrait sur dir2 sur server2 au préalable) - ce qui se passe est que j'obtiens une copie de dir1, appelée dir1, en dir2.
Je suis sûr qu'il manque quelque chose de basique, mais je n'arrive pas à comprendre.
Toute aide très appréciée!
Cordialement,
Giles
D'accord, j'ai moins de 10 représentants et je ne peux pas attendre 8 heures alors voici ce que j'ai obtenu:
Voici un script qui fonctionne pour moi:
#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo "failed ... trying method 2"
scp -prq server1:dir1 server2:dir2
fi
exit
Vous ne savez toujours pas comment faire cela en une seule commande ou même si possible.
Bravo @mindthemonkey, parfois simplement obtenir un nouveau point de vue peut aider à montrer la voie.
cd dir2
.Réponses:
Utilisez cette syntaxe "dot":
Cela copie le contenu de ce répertoire, plutôt que le répertoire lui-même. Et je pense que c'est plus portable que le
*
globbing.la source
scp: error: unexpected filename: .
Normalement, pour contrôler la création de répertoire, vous devez utiliser une fin
/
pour impliquer un chemin complet, mais je pense que cela ne permettra pas de créer le répertoire s'il n'existe pas:Cela pourrait également manquer caché. fichiers en raison de l'expansion * glob (sans certains travaux spécifiques difficiles sur le shell )
Vous pouvez l'aborder différemment avec
ssh
ettar
.Mais cela signifie que le trafic passe par votre machine locale.
la source