Comment puis-je obtenir un répertoire entier dans sftp?

191

J'apprends à utiliser sftp et je veux copier un répertoire de l'ordinateur distant sur mon ordinateur local. Si j'essaye

get [directory]

ça me donne cette erreur:

Cannot download non-regular file: /home/mpirocch/Documents

get -R ne fonctionne pas non plus.

Matthieu
la source
2
La méthode récursive put / get a été ajoutée à OpenSSH dans la version 5.4 publiée en 2010. Vous pouvez envisager de mettre à niveau vos serveurs car elle ajoute également de nombreuses corrections de bugs et de meilleures fonctionnalités de sécurité.
Lèse majesté le

Réponses:

268

Utilisez le -rdrapeau (récursif):

get -r *
mani-frais
la source
16
Merci d'avoir mis une réponse qui répond réellement à la question.
Jonnyflash
30
Me donne:get: Invalid flag -r
ghbarratt
2
Cela me donne aussi le drapeau invalide. Je ne suis pas sûr que cela soit supporté par tous les systèmes.
Ben
@Ben: Lorsque j'ai posé cette question en 2009, le -rdrapeau n'existait pas. Votre système est-il à jour?
Matthew
15
@silvinci pas tous les systèmes actuels. Option illégale avec CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9
52

Utilisation:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents
Cristian Ciupitu
la source
3
Cela fonctionne, mais ce serait bien de pouvoir le faire à partir de SFTP (pour que je puisse voir ce que je copie avant de le copier). Est-ce possible?
Matthew
@ Matthew: Je ne pense pas. Je me pose la même question depuis un certain temps et la meilleure réponse que j’ai pour le moment est scp -r. Vous pouvez également utiliser un client SFTP avancé tel que Filezilla.
Cristian Ciupitu
1
scp -r suivra les liens symboliques ...
jsleuth
5
Certains systèmes peuvent autoriser sftp, mais pas scpaccéder.
Turion
40

Utiliser lftp:

lftp sftp://user@host

Ensuite, dans lftp, cddans le répertoire que vous voulez copier, et utilisez la mirrorcommande pour télécharger de manière récursive le répertoire sélectionné, comme ceci:

mirror

Cette commande accepte les options et les arguments:

miroir [ OPTIONS ] [ source [ cible ]]

Par exemple, l' option -R(ou --reverse) entraînera le téléchargement de l'arborescence du répertoire local dans le répertoire distant:

mirror -R

Voir la lftp(1)page de manuel sur le site du projet ou sur Debian.org pour d'autres commandes et options.

bshanks
la source
4
+1 lftp est comme un petit paquet de magie et de joie!
WCWedin
16

Eh bien, ce petit guide devrait vous aider, mettez en miroir un serveur distant dans un dossier local avec lftp

lftp sftp://user:[email protected]:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = utilise le protocole SFTP
  • mirror = mode miroir
  • verbose = montre les fichiers en cours de téléchargement
  • use-pget-n = nombre de segments, vraiment utile pour accélérer les gros fichiers
  • parallel = télécharge des fichiers multiplicateurs en même temps

si vous souhaitez télécharger des fichiers en parallèle, éteignez-le use-pget-n=8avec--parallel=8

espérons que cela aide tous ceux qui ont besoin de mettre en miroir un dossier distant dans un dossier local

nwgat
la source
Merci, cela a fonctionné pour moi, après l'échec des autres méthodes (en particulier, pas d'option "-r" sur sftp). La première partie de la commande dans mon cas devait être citée, en raison de la présence de dollars dans le mot de passelftp 'sftp://user:[email protected]:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason
15

N'utilisez pas directement le programme sftp si vous pouvez trouver quelque chose de mieux. Pour Linux, de nombreux gestionnaires de fichiers (au moins Nautilus et Dolphin, GNOME et KDE) prennent en charge sftp de manière native, et il y a toujours sshfs. Pour Windows, il y a WinSCP, et probablement d' autres . Le but de tout cela est de vous permettre d’accéder aux fichiers sur sftp comme s’ils se trouvaient sur un système de fichiers classique, de sorte que vous n’ayez pas à vous soucier de leur accès sur sftp.

Ryan Thompson
la source
Wow, Nautilus fonctionne très bien avec SFTP. J'ai ajouté un marque-page dans Nautilus, et maintenant tout est ridiculement facile. Merci!
Matthew
J'ai eu un problème de performance avec Nautilus SFTP. Oui, c'est très pratique, mais je ne pouvais pas saturer un réseau de 1 Gbit / s via Nautilus, alors qu'avec une sftp/sshinterface de ligne de commande simple , j'étais (environ 100 Mo / s de transfert de fichiers). Le problème était donc Nautilus sous GNU / Linux Mint.
Stamster
13

Essayez mgetau lieu de get.

Précision: mget va travailler si vous êtes à l' intérieur du répertoire que vous souhaitez copier; si vous faites quelque chose comme ça:

sftp> cd dir_to_get
sftp> mget *

il obtiendra tous les fichiers dans ce répertoire. Cependant, il ne récupérera pas le contenu des sous-répertoires de manière récursive.

Ken Keenan
la source
1
Mget ne fonctionne pas mieux que d'obtenir pour moi.
Matthew
1
Impossible de télécharger un fichier non régulier avec ceci
Dchris
1
Cela a fonctionné pour moi sur un système où «get -r» ne fonctionnait pas.
Tchotchke
10
get -r [directory]

obtient [directory]et tout en dessous, où rsignifie récursif. J'ai trouvé cela simplement en tapant helpde sftp.

drkvogel
la source
1
OMI c'est la meilleure réponse à cette question. :)
ramrunner
3
Ceci est une copie de la réponse du 29 novembre 2010 (il y a presque un an et demi).
Cristian Ciupitu
5

Comme avec cp:

scp -rp user@host:/path/to/dir dir

Ce qui précède préservera les temps et les modes des fichiers et sous-répertoires d'origine. Ceci est particulièrement utile pour la récupération de sauvegardes.

Aziraphale
la source
Il s'agit essentiellement d'une copie de la réponse du 29 novembre 2010 (il y a presque deux ans).
Cristian Ciupitu
0

J'ai le dossier de dist de Java dans le serveur distant, où j'ai l'arbre suivant:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

L'objectif est: je veux utiliser SFTP? Et mettez-les dans / tmp / <>

Étape 1. sftp remoteuser @ ip

Étape 2. cd / var / tmp

Étape 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Étape 3. lcd / tmp / dist

Étape 4. mget *

Étape 5. lcd / tmp / dist / lib

Étape 6. mget *

Étape 7. enfin j'ai mon objectif

$ ls
Audio.jar  lib  README.TXT
YumYumYum
la source