Comment télécharger récursivement un dossier via FTP sur Linux [fermé]

325

J'essaie de ftp un dossier en utilisant le client ftp en ligne de commande, mais jusqu'à présent, je n'ai pu utiliser 'get' que pour obtenir des fichiers individuels.

Charles Ma
la source
5
la bonne réponse est du 6 avril 11 à 14:13 par lkuty. Ne l'utilisez pas mget, ce n'est pas du tout récursif. la réponse du 22 septembre 2008 à 9h01 Thibaut Barrère est plus facile à comprendre mais doit ajouter l'option -l 0comme mentionné dans les commentaires
chriscatfr

Réponses:

635

Vous pouvez compter sur wget qui gère généralement ftp correctement (du moins d'après ma propre expérience). Par exemple:

wget -r ftp://user:[email protected]/

Vous pouvez également utiliser -mce qui convient à la mise en miroir. Il est actuellement équivalent à -r -N -l inf.

Si vous avez des caractères spéciaux dans les détails des informations d'identification, vous pouvez spécifier les arguments --useret --passwordpour le faire fonctionner. Exemple avec connexion personnalisée avec des caractères spécifiques:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDIT Comme l'a souligné @asmaier, attention, même si -rc'est pour la récursivité, il a un niveau max par défaut de 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Si vous ne voulez pas rater les sous-répertoires, utilisez mieux l'option de mise en miroir -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.
Thibaut Barrère
la source
121
Mieux utiliser wget -m( --mirror). wget -rest limité à une profondeur de récursivité de 5 par défaut.
asmaier
13
J'ai dû utiliser --useret --passwordaussi sur Red Hat. Mon wget est: GNU Wget 1.11.4 Red Hat modifiedje me demande s'il s'agit d'une version ou d'une distribution ...
devin
61
Vous pouvez définir un niveau de récursivité infini avec -l 0, donc pas besoin d'utiliser --mirrorce qui peut avoir des effets secondaires indésirables tels que les fichiers
.listing
28
J'utilise wget --ask-password -rl 99 ftp://[email protected]. De cette façon, le mot de passe n'est pas visible avec pset ne reste pas dans l'historique. Bien sûr, par la nature de ftp, il est envoyé non chiffré au serveur.
Walter Tross
7
Rappel pour bash newbs: vous devrez utiliser des guillemets simples si votre nom d'utilisateur ou votre mot de passe ont des caractères de contrôle (comme $), par exemple--user='user' --password='pa$$word'
tobek
164

Juste pour compléter la réponse donnée par Thibaut Barrère.

j'ai utilisé

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

Notez la double barre oblique après le nom du serveur. Si vous ne mettez pas de barre oblique supplémentaire, le chemin est relatif au répertoire personnel de l'utilisateur.

  • -nH évite la création d'un répertoire nommé d'après le nom du serveur
  • -nc évite de créer un nouveau fichier s'il existe déjà sur la destination (il est juste ignoré)
  • --cut-dirs=5permet de prendre le contenu de / absolu / chemin / vers / répertoire et de le mettre dans le répertoire où vous lancez wget. Le chiffre 5 est utilisé pour filtrer les 5 composants du chemin. La double barre oblique signifie un composant supplémentaire.
Ludovic Kuty
la source
3
Brillant. La possibilité d'ignorer des fichiers qui existent déjà est idéale pour rattraper les derniers ajouts lors d'une migration de serveur. rsync est plus efficace et plus flexible, mais parfois cette option n'est tout simplement pas disponible et seul FTP peut être utilisé.
Jason
Bons paramètres ici en particulier -nc et --cut-dirs. Merci d'avoir partagé!
Lance Cleveland
2
Je ne fais pas toujours confiance à "ignorer les fichiers existants" car l'un ou l'autre peut être incomplet ou différent en taille et en contenu, mais bon, il a mentionné l'option
Daniel W.
Même aujourd'hui, j'utilise toujours cette commande wget lorsque je ne peux pas utiliser rsync. Les répertoires -nc et --cut sont tellement utiles!
Half Crazed
4
Impressionnant! Et si vous ne voulez pas mettre votre mot de passe sur la ligne de commande, vous pouvez utiliser --ftp-user=USERet --ask-password.
shoover
25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory
Vinko Vrsalovic
la source
Je n'ai pas pu me connecter à un serveur FTP en utilisant les paramètres, mais en utilisant la structure open ftp://USERNAME:PASSWORD@HOSTaprès le démarrage de ncftp…
feeela
+1 - Je sais que ce message est ancien, mais je viens de le découvrir et ncftp était vraiment facile à utiliser. J'ai utilisé -R pour obtenir récursivement avec ncftpget
Zack Macomber
nettement plus fiable que wget, et plus rapide aussi en mode TAR. Merci!
lencinhaus
3
Cela ne fonctionne pas comme indiqué sur Ubuntu 14.04. La syntaxe qui a fonctionné pour moi était "get -R directory" au lieu de mget.
Ivan
A travaillé pour moi sur Ubuntu 14.04. Je n'avais pas besoin de penser que tout était juste là.
ashley
22

Si lftpest installé sur votre machine, utilisez mirror dir. Et vous avez terminé. Voir le commentaire de Ciro ci-dessous si vous souhaitez télécharger récursivement un répertoire.

Dilawar
la source
7
btw, mirror -R dirtélécharge / met à jour le répertoire récursif
Ciro Santilli 13 冠状 病 六四 事件 法轮功
1
peut également utiliser mirror ./pour télécharger tous les fichiers et dossiers récursivement dans le chemin actuel.
Nabi KAZ
Vous pouvez également simplement taper mirror, pour le répertoire actuel et ses sous-dossiers.
Michael
18

Si vous pouvez utiliser scpau lieu de ftp, l' -roption le fera pour vous. Je vérifierais si vous pouvez utiliser un mécanisme de transfert de fichiers plus moderne que FTP.

Greg Hewgill
la source
2
J'ai voté pour cela parce que c'était exactement ma première pensée, même si cela ne répond pas strictement à la question telle quelle.
metao
Lequel proposez-vous @ greg-hewgill? J'ai un problème similaire
Michal Gonda
1
scptentera toujours d'utiliser ssh, qui ne fonctionnera pas si vous ne disposez que des informations d'identification FTP. Ça fait bizarre de répondre à un commentaire de 2008 disant que la technologie avec laquelle je suis coincé n'est pas moderne :( Bon vieux 2008, j'ai eu 18 ans le jour où vous avez posté votre commentaire.
aexl
7

Il y a 'ncftp' qui est disponible pour l'installation sous linux. Cela fonctionne sur le protocole FTP et peut être utilisé pour télécharger des fichiers et des dossiers de manière récursive. fonctionne sur linux. A été utilisé et fonctionne bien pour le transfert récursif de dossiers / fichiers.

Vérifiez ce lien ... http://www.ncftp.com/

Zéro
la source
2
ncftp fonctionne également sur Windows
Ilya
J'adore ncftp! Je vous remercie.
jocull
3

Si vous le pouvez, je vous suggère fortement taret bzip(ou gzip, quoi que flotte votre bateau) le répertoire sur la machine distante - pour un répertoire de n'importe quelle taille significative, les économies de bande passante valent probablement le temps de compresser / décompresser.

Hank Gay
la source
Peut-être en 2008, mais en 2013 la bande passante n'a plus d'importance et vous pourriez avoir un accès FTP mais pas de console :-)
Daniel W.
3

Si vous voulez vous en tenir à la ligne de commande FTP, vous devriez essayer NcFTP. Ensuite, vous pouvez utiliser get -R pour obtenir récursivement un dossier. Vous obtiendrez également l'achèvement.

le jazz
la source
3

wget -r ftp://url

Fonctionne parfaitement pour Redhat et Ubuntu

Phillip
la source
1

Vous ne devez pas utiliser ftp. Comme telnets'il n'utilisait pas de protocoles sécurisés, et les mots de passe sont transmis en texte clair. Cela permet aux tiers de saisir très facilement votre nom d'utilisateur et votre mot de passe.

Pour copier des répertoires distants à distance, ces options sont meilleures:

  • rsyncest l'outil le plus adapté si vous pouvez vous connecter via ssh, car il ne copie que les différences et peut facilement redémarrer au milieu en cas de rupture de la connexion.

  • ssh -r est la deuxième meilleure option pour copier récursivement les structures de répertoires.

Voir:

  • page de manuel rsync

  • page de manuel ssh

Tilo
la source
pas sécurisé, juste ftp
JosFabre
nous sommes en 2015. FTP ne doit pas être utilisé.
Tilo
2
Je suis d'accord. Et des suggestions pour une meilleure sécurité doivent toujours être données. Mais la question concernait le FTP, donc dire qu'il ne faut pas l'utiliser ne sert à rien
JosFabre
Je suis respectueusement en désaccord. Ils utilisent le mauvais outil pour le travail. Ils devraient apprendre à utiliser des outils sécurisés et actuels, plutôt que le ftp des années 80. Plus précisément, personne ne devrait plus exécuter de serveur ftp: P
Tilo
4
Désolé, mais la semaine dernière, j'accédais à un serveur qui n'avait qu'une connectivité FTP. Ma tâche consistait à m'en éloigner .
Antti Haapala
-6

basculer l'invite par la commande PROMPT.

Usage:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *
Rohit
la source
9
0 vote: mget n'est pas récursif.
Lance Cleveland