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

31

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?

Blankman
la source
Je préfère tarvia ssh: unix.stackexchange.com/a/10028/79839
poussins

Réponses:

56

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

Cependant, scpse comporte comme cpet 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 ne ferez probablement que des mises à jour, et non pas recréer le tout, vous trouverez donc probablement que les choses avancent plus rapidement si vous utilisez rsyncplus de ssh à la place 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 -avWpour 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 rsynccomme ci-dessus, et inclure l'indicateur --deleteet il supprimera le même fichier du côté de destination.

David Mackintosh
la source
9

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.
Zypher
la source
2

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.)

Luke Schlather
la source