Question 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?


518
2018-04-29 04:24


origine




Réponses:


Yup, 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.

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


838
2018-04-29 04:28



Cependant, gardez à l'esprit que cela ne préservera pas les liens symboliques. - CpnCrunch
Notez que -pr (options dans l’ordre inversé) ne copie pas les dossiers, mais leur contenu dans le répertoire cible (apparemment, l’ordre des options est important). - pms
Pour certaines raisons /path semble être par rapport à la users $HOME - comment puis-je le rendre absolu sans être root@? - Jonathan
Oui, SCP ne met jamais les fichiers là où je veux. Souvent, lorsque j'essaie de remplacer un répertoire, je finis par me retrouver à la place avec un autre répertoire portant le même nom. Je suis très prudent avec ça. - sudo


Bien que les réponses précédentes soient techniquement correctes, vous devriez également envisager d’utiliser rsync au lieu. rsync compare les données des émetteurs et des destinataires à un mécanisme de diff, de sorte qu'il ne soit pas nécessaire de renvoyer les données déjà envoyées.

Si vous voulez copier quelque chose sur une machine distante plus d’une fois, utilisez rsync. En fait, c'est bien d'utiliser rsync chaque fois car il a plus de contrôles pour la copie des autorisations de fichiers, la propriété 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 - beaucoup plus efficace que l'exécution scp et copier tout à chaque fois.

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

Enfin, les versions modernes de rsync par défaut sur ssh, donc si scp travaille déjà, rsync devrait à peu près être un remplaçant sans rendez-vous.


149
2018-04-29 05:11



"aucune donnée ne sera transférée" sauf, bien sûr, les données nécessaires pour déterminer exactement ce qui a changé ou non. - thsutton
Ha ouais j'ai glissé ça un peu évidemment. Nous ne parlons pas d'intrication quantique ici. - Phil Hollenback
c'est tellement triste que osx, win7 et même pas ubuntu utilise encore quelque chose comme rsync pour leur interface graphique. - cregox
dmourati j'ai répondu à sa question. Je lui ai dit une meilleure façon de le faire. - Phil Hollenback
@raphnguyen: non, la suppression de fichiers du répertoire local ne les supprimera pas du répertoire distant. Vous pouvez activer ce comportement avec le --delete option rsync. - Phil Hollenback


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

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


30
2018-04-29 04:27





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

scp -r

Ce que je confonds avec l'option de copie récursive locale habituelle '-R' (majuscule)

cp -R

9
2017-09-11 17:53



Je voulais juste souligner la différence entre cp et scp car -r et -R ne sont pas identiques. unix.stackexchange.com/questions/18712/… - Tarun


Le meilleur moyen 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 préservation des liens symboliques)
  • -z: compresse
  • -v: verbose: affiche les fichiers
  • -P: affiche les progrès en tant que fichiers terminés / fichiers restants
  • -e ssh: faire rsync dans le protocole ssh
  • --delete: supprime les fichiers de la destination qui ne sont plus dans la source

4
2017-11-05 18:33



Toutes les versions de rsync que j'ai utilisé utiliserait ssh par défaut, donc -essh est peu probable d'être nécessaire. Et le choix de la commande utilisée pour se connecter à l'hôte distant n'a vraiment aucun rapport avec la copie récursive. - kasperd


Après avoir recherché l'indicateur de copie récursive et l'avoir utilisée avec succès grâce à ce message, j'aimerais simplement poster une suggestion.

Si c'est le cas, vous copiez (de manière récursive) un répertoire. Peut-être que si les fichiers sont envoyés compressés, vous pourriez gagner du temps lors du transfert

Ce que j'ai fait à la fin était:

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


3
2018-06-06 18:00



l'extension de fichier doit être soit .tar.gz ou .tgz car le fichier est une archive tar compressée (depuis le -z le drapeau est utilisé). - anthonybell


Vous pouvez copier de manière récursive un répertoire dans une archive compressée avec cette commande simple:

ssh -p 22 user@address-to-copy-from.com  '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 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

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

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

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


1
2018-01-06 07:20





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 myremoteusername@122.10.12.123:/dest/folder

0
2018-01-06 06:49





Une autre option (probablement préférable pour une utilisation répétée) consiste à utiliser NFS - consultez nfs-kernel-server et comment configurer les partages NFS.


-2
2017-08-11 22:08



C'est un non-sens complet. Il y a une infinité de cas où vous utiliseriez scp mais NFS n'est pas une option. - Sven♦