web-dev-qa-db-fra.com

Puis-je scp un dossier qui a des sous-dossiers?

J'ai un dossier qui contient des fichiers pour un site Web statique comme:

/site/index.html
/site/css/css.css
/site/js/js.js
/site/images/...

Si je mets à jour quelque chose sur mon ordinateur portable, je veux qu'une seule commande envoie les fichiers à mon serveur Ubuntu. Je ne veux pas y installer FTP si je n'en ai pas trop, je me demande si scp serait capable de gérer ça?

32
Blankman

La commande scp -r source user@target:dest parcourra tous les sous-répertoires de source et les copiera.

Cependant, scp se comporte comme cp et copie toujours les fichiers, même s'il est identique à la fois sur la source et sur la destination. [Voir ici pour une solution de contournement.]

Comme il s'agit d'un site Web statique, vous n'effectuerez probablement que des mises à jour, et non pas recréerez le tout, donc vous constaterez probablement que les choses avancent plus rapidement si vous utilisez rsync sur ssh au lieu de scp. Probablement quelque chose comme

rsync -av -e ssh source user@target:dest

...pour commencer. Si vous faites cela sur un réseau local, j'utiliserais personnellement les options -avW à la place de rsync.

Rsync vous donne également la possibilité de dupliquer les suppressions dans votre source; donc si vous supprimez un fichier de votre arborescence, vous pouvez exécuter rsync comme ci-dessus et inclure l'indicateur --delete et il supprimera le même fichier du côté destination.

57
David Mackintosh

scp a un indicateur récursif qui fera ce que vous voulez. scp -r /base/directory user@server:/to/location

de man scp

-r      Recursively copy entire directories.  Note that scp follows symbolic
          links encountered in the tree traversal.
9
Zypher

scp -r et rsync -r sont les moyens les plus fiables pour obtenir ce que vous voulez, comme d'autres l'ont noté.

Vous pouvez également utiliser sshfs pour le "monter" comme s'il s'agissait d'un lecteur local: sshfs user@Host:/site /mnt/mountpoint

(Cependant, il vaut probablement mieux travailler localement et déployer avec rsync. Juste un autre outil à connaître.)

2
Luke Schlather