798 votes

Scp peut-il copier des répertoires de manière récursive ?

Actuellement, je ne peux copier qu'un seul .tar fichier. Mais comment puis-je copier des répertoires de manière récursive avec scp ?

1303voto

dmourati Points 24230

Yup, utilise -r :

scp -rp sourcedirectory user@dest:/path
  • -r signifie récursif
  • -p préserve les heures de modification, les heures d'accès et les modes du fichier d'origine.

Remarque : Cela crée le sourcedirectory à l'intérieur de /path ainsi les fichiers seront dans /path/sourcedirectory

12 votes

Cependant, gardez à l'esprit que cela ne préservera pas les liens symboliques.

37 votes

Notez que -pr (options dans l'ordre inverse) ne copiera pas les dossiers, mais plutôt leur contenu dans le répertoire cible (apparemment, l'ordre des options est important).

1 votes

Si je fais un ./ pour faire le répertoire actuel, il dit Error : unexpected file name. Je sais que je peux aller dans le répertoire parent et le faire de cette façon, ou utiliser le globing avec *. Cependant, je suis curieux de savoir pourquoi ./ ne fonctionnerait pas pour le répertoire source ?

218voto

RyanBrady Points 1903

Bien que les réponses précédentes soient techniquement correctes, vous devriez aussi envisager d'utiliser rsync à la place. rsync compare les données du côté de l'envoi et de la réception à l'aide d'un mécanisme de différenciation afin de ne pas avoir à renvoyer des données qui ont déjà été envoyées.

Si vous avez l'intention de copier quelque chose sur une machine distante plus d'une fois, utilisez rsync . En fait, il est bon d'utiliser rsync à chaque fois parce qu'il dispose de plus de contrôles pour des choses comme la copie des permissions et de la propriété des fichiers et l'exclusion de certains fichiers ou répertoires. En général :

$ rsync -av /local/dir/ server:/remote/dir/

va synchroniser un répertoire local avec un répertoire distant. Si vous l'exécutez une seconde fois et que le contenu du répertoire local n'a pas changé, aucune donnée ne sera transférée - bien plus efficace que l'exécution de la commande scp et en copiant tout à chaque fois.

Aussi, rsync vous permet de récupérer les transferts interrompus très facilement, contrairement à scp .

Enfin, les versions modernes de rsync fonctionnent par défaut via ssh, donc si scp fonctionne déjà, rsync devrait pouvoir être remplacée par une autre.

1 votes

Je suis d'accord rsync est plus efficace. Une chose qu'il ne fait pas actuellement scp permet de copier entre des hôtes distants (du moins sans exécuter le client rsync sur l'un d'eux).

5 votes

-av v pour verbeux, a pour archive et est un raccourci de -rlptgoD qui implique une récurrence, la préservation des dates et des liens des titulaires de droits. Si vous ne voulez que du récursif, utilisez -r

1 votes

Rsync ne crypte pas le trafic, vous devez donc utiliser un "-e ssh" supplémentaire pour crypter le trafic comme scp.

38voto

HedgeMage Points 513

C'est ce que le -r l'option est pour. :)

Voir le scp man page pour plus d'informations si nécessaire.

20voto

Tarun Points 281

Option de copie récursive '-r' (minuscule)

scp -r

Ce que je confonds avec l'option de copie locale récursive '-R' (en majuscules).

cp -R

5 votes

Je voulais juste souligner la différence entre cp et scp car -r et -R ne sont pas les mêmes. unix.stackexchange.com/questions/18712/

18voto

mick Points 685

Le meilleur moyen est d'utiliser rsync via SSH.

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

Mes options préférées sont -Pazvessh --delete :

  • -a : mode archive (inclut un grand nombre d'options communes par défaut, y compris la préservation des liens symboliques)
  • -z : compresser
  • -v : verbeux : montrer les fichiers
  • -P : afficher la progression en tant que fichiers terminés/fichiers restants
  • -e ssh : faire rsync dans le protocole ssh
  • --delete : supprimer les fichiers de la destination qui ne sont plus dans la source.

0 votes

Toutes les versions de rsync que j'ai utilisé utiliserait ssh par défaut, donc -essh ne sera probablement pas nécessaire. Et le choix de la commande utilisée pour se connecter à l'hôte distant n'est vraiment pas lié à la copie récursive.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X