web-dev-qa-db-fra.com

Scp peut-il copier des répertoires récursivement?

Actuellement, je ne peux copier qu'un seul .tar fichier. Mais comment copier récursivement des répertoires avec scp?

610
kernel

Oui, utilisez -r:

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

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

981
dmourati

Bien que les réponses précédentes soient techniquement correctes, vous devriez également envisager d'utiliser rsync à la place. rsync compare les données des côtés d'envoi et de réception avec un mécanisme de diff pour ne pas avoir à renvoyer des données déjà envoyées précédemment.

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

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

synchronisera un répertoire local avec un répertoire distant. Si vous l'exécutez une deuxième fois et que le contenu du répertoire local n'a pas changé, aucune donnée ne sera transférée - beaucoup plus efficace que d'exécuter scp et de tout copier à chaque fois.

De plus, rsync vous permet de récupérer très facilement des transferts interrompus, contrairement à scp.

Enfin, les versions modernes de rsync par défaut fonctionnent sur ssh, donc si scp fonctionne déjà, rsync devrait à peu près être un remplacement direct.

177
Phil Hollenback

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

Voir la page de manuel de scp pour plus d'informations si nécessaire.

34
HedgeMage

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

scp -r

Ce que je confond avec l'option de copie récursive locale régulière '-R' (majuscule)

cp -R
12
Tarun

La meilleure façon est d'utiliser rsync sur 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 - supprimer:

  • -a: mode archive (inclut de nombreuses options communes par défaut, y compris la conservation des liens symboliques)
  • -z: compresser
  • -v: verbose: afficher les fichiers
  • -P: affiche la progression sous forme de fichiers terminés/fichiers restants
  • -e ssh: faire rsync dans le protocole ssh
  • --delete: supprime les fichiers dans la destination qui ne sont plus dans la source
7
mick

Après avoir recherché l'indicateur de copie récursive et l'avoir utilisé avec succès grâce à ce message, je voudrais poster juste une suggestion.

Si le cas est que vous copiez (récursivement) un répertoire. Peut-être que si les fichiers sont envoyés compressés, vous pourriez gagner du temps dans le transfert

Ce que j'ai finalement fait, c'est:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

J'espère que cela t'aides

4
user9869932

Vous pouvez copier récursivement un répertoire dans une archive compressée avec cette commande simple:

ssh -p 22 [email protected]  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Par exemple, pour copier le contenu de /var/log de domain.com à ~/logs.tgz vous courez:

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' > ~/logs.tgz

Vous pouvez également extraire des fichiers sur le système cible à l'aide de canaux. Cette commande copiera le contenu de /var/log à domain.com à ~/destination/log sur votre système:

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Bien que pour mettre en miroir un répertoire, vous devriez probablement utiliser rsync...

2
Anubioz

Si vous préférez transmettre le mot de passe de l'utilisateur en tant que paramètre plutôt que de le saisir de manière interactive, vous pouvez utiliser sshpass (Sudo apt-get install -y sshpass).

Exemple:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1
Franck Dernoncourt

Vous pouvez utiliser l'option -r avec la commande scp pour copier les répertoires de manière récursive sur n'importe quel système. Si vous avez besoin d'autre chose, reportez-vous à tutoriel de commande scp . L'option -r représente une opération récursive dans la plupart des commandes Linux.

0
atthik