web-dev-qa-db-fra.com

Comment télécharger de manière récursive un dossier via FTP sur Linux

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

305
Charles Ma

Vous pouvez vous fier à wget, qui gère généralement ftp get correctement (du moins dans ma propre expérience). Par exemple:

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

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

Si vous avez des caractères spéciaux dans les informations d'identification, vous pouvez spécifier les arguments --user et --password pour que cela fonctionne. Exemple avec une 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, veillez à ce que même si -r soit pour la récursion, il a un niveau maximum 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 plutôt 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.
600
Thibaut Barrère

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 je ne mets pas de barre oblique supplémentaire, le chemin est relatif au répertoire de base 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 simplement ignoré)
  • --cut-dirs = 5 me permet de prendre le contenu du répertoire/absolute/path/to/et de le placer dans le répertoire où je lance wget. Le nombre 5 est utilisé pour filtrer les 5 composantes du chemin. La double barre oblique signifie un composant supplémentaire.
157
Ludovic Kuty
ncftp -u <user> -p <pass> <server>
ncftp> mget directory
25
Vinko Vrsalovic

Si lftp est installé sur votre ordinateur, utilisez mirror dir. Et vous avez terminé. Voir le commentaire de Ciro ci-dessous si vous souhaitez télécharger un répertoire de manière récursive.

20
Dilawar

Si vous pouvez utiliser scp au lieu de ftp, l'option -r le fera pour vous. Je voudrais vérifier si vous pouvez utiliser un mécanisme de transfert de fichier plus moderne que FTP.

17
Greg Hewgill

Utilisez WGet à la place. Il supporte les protocoles HTTP et FTP.

wget -r ftp://mydomain.com/mystuff

Bonne chance!

référence: http://linux.about.com/od/commands/l/blcmdl1_wget.htm

8
Jason Stevenson

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 correctement pour le transfert récursif de dossiers/fichiers.

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

7
Cypher

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 aurez également obtenir l'achèvement.

3
Jazz

Si vous le pouvez, je vous suggère fortement de tar et bzip (ou gzip, quel que soit le bateau flottant) le répertoire de la machine distante — pour un répertoire de taille importante, les économies de bande passante va probablement valoir le temps de compresser/décompresser.

3
Hank Gay

wget -r ftp://url

Fonctionne parfaitement pour Redhat et Ubuntu

3
Phillip

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

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

  • rsync est l'outil le mieux 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 coupure de la connexion.

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

Voir:

1
Tilo