Question Utilisation de wget pour télécharger récursivement des répertoires FTP entiers


Je veux copier tous les fichiers et dossiers d'un hôte à un autre. Les fichiers de l'ancien hôte sont situés dans / var / www / html. Je n'ai qu'un accès FTP à ce serveur et je ne peux pas tarer tous les fichiers. Une connexion régulière à l'ancien hôte via FTP m'amène au dossier / home / admin.

J'ai essayé d'exécuter la commande suivante sur mon nouveau serveur:

wget -r ftp://username:password@ip.of.old.host

Mais tout ce que je reçois est un fichier index.html composé.

Quelle est la bonne syntaxe pour utiliser wget de manière récursive sur FTP?


87
2018-06-13 09:21


origine


Notez que, par défaut, wget -r a une profondeur de récursivité maximale de 5; Si vous avez des sous-répertoires plus profonds, ils seront ignorés à moins que vous ne changiez cela (voir -l dans la page de manuel). - mikewaters


Réponses:


Essayer -m pour --mirror

wget -m ftp://username:password@ip.of.old.host

119
2018-06-13 10:04



Pour des raisons de sécurité, il serait bon d'utiliser --ask-password pour éviter que le mot de passe ne soit conservé history. - checksum
C'est trop cool. Travaillé comme un charme .. - Sambhav Sharma
Cela devrait être la réponse acceptée (pour une meilleure visibilité). - bgondy
cela n'inclut pas le chemin du répertoire à télécharger, je suppose que la réponse de @Formoda est meilleure - Wasim A.


Vous avez raison, vous avez juste besoin d'un * à la fin:

wget -r ftp://username:password@1.2.3.4/dir/*

Pour les serveurs partagés, vous pouvez utiliser comme ceci:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

Parce que la plupart des serveurs partagés ont ftp-username quelque chose comme username @ hostname, la première commande wget ne fonctionne pas et la deuxième commande fonctionne correctement.


36
2018-06-22 12:35



Cela n’irait qu’à un seul répertoire. Mieux utiliser le drapeau -m - SvennD
Dans certains cas, la deuxième commande ne fonctionne pas à cause de l'espace. Vous pouvez utiliser la première commande pour l'hébergement de partage comme celui-ci. ** wget -r ftp: / / nom d'utilisateur% 40host: mot de passe @ host / dir / ** - Wasim A.
Remarque: vous devez utiliser soit -m ou -r -l inf car -r a une profondeur de récursivité par défaut de 5. Voir gnu.org/software/wget/manual/… - ndemou


Outre wget, vous pouvez également utiliser lftp en mode script. La commande suivante va mettre en miroir le contenu d'un répertoire FTP distant donné dans le répertoire local donné, et il peut être placé dans le travail cron:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

Il gère automatiquement la récursivité dans les répertoires et permet de spécifier le répertoire de départ de la source distante à partir duquel télécharger les données.


6
2018-06-13 18:04





Vous pouvez utiliser 'curlftpfs - monter un hôte ftp en tant que répertoire local' et, une fois monté, vous pouvez utiliser des outils de fichier normaux tels que 'cp -r'.


5
2018-06-13 21:22



curlftpfs a des problèmes de performances majeurs en ce moment, sauf si vous rétrogradez libcurl3-gnutls - Hengjie


Vérifiez la commande wget ci-dessous pour télécharger les données de FTP de manière récursive.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: Est à télécharger récursivement.

-np: Est pour aucun parent ascendant.

-nH: Permet de désactiver la création d'un répertoire dont le nom est identique à celui de l'URL, par exemple abc.xyz.com

--cut-dirs: Permet d'ignorer le nombre de répertoires parents. La valeur de cette option sera différente pour votre commande.

Vous pouvez vérifier en exécutant la commande ci-dessus.


4
2017-07-24 04:48





Utilisez -m plutôt que -r, en raison de la profondeur de récursivité.

http://www.editcorp.com/Personal/Lars_Appel/wget/wget_2.html#SEC11


3
2018-06-17 11:56





Devrait travailler essayer:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

2
2018-06-13 09:54





Utilisation:

wget -m ftp://192.168.0.1

et il va refléter tous les fichiers et dossiers.


2
2018-06-13 14:07



Comme je l'ai dit, la connexion via FTP m'emmène dans le dossier / home / admin, et les fichiers dont j'ai besoin sont dans / var / www / html. Ainsi, lorsque j'exécute la commande que vous avez suggérée, je ne récupère que le contenu de / home / admin. J'ai essayé de le lancer avec 192.168.0.1/var/www/html, mais ensuite il essaie de CWD / home / admin / var / www / html. Comment puis-je le faire aller à ce dossier à partir de la racine?
Je n'ai aucune expérience de ce problème particulier, mais vous pouvez essayer de créer un lien symbolique vers / var / www / html sous votre domicile. Ensuite, vous pouvez utiliser une adresse comme 192.168.0.1/html - prestomation
J'ai essayé de créer un lien symbolique, mais wget a créé un lien symbolique similaire sur mon site local.


C'est la bonne syntaxe. Vous ne savez pas pourquoi vous n'obtenez pas les résultats escomptés.

Comme toujours, il y a plus d'une façon de le faire. Essayez ncftp, en particulier ncftpget


1
2018-06-13 09:27



Je ne peux pas installer plus de logiciels sur mon nouveau serveur. Ne devrais-je pas dire à wget de télécharger tous les fichiers depuis / var / www / html? J'ai essayé wget -r nom d'utilisateur: password@ip.of.old.host/var/www/html mais j'ai eu une erreur de répertoire non trouvé.


Je peux comprendre si vous essayez de transférer cela dans cron ou quelque chose du genre, mais pourquoi ne pas simplement utiliser ftp sur le serveur avec votre client normal et votre cible *? Cela pourrait être un chemin plus rapide vers le succès.


1
2018-06-13 13:37



J'ai essayé mget * mais cela ne fonctionnait pas avec les sous-dossiers, disant que le sous-dossier local n'existe pas. Est-il possible de lui faire créer automatiquement les dossiers locaux?
Selon votre client, l'option -r fait généralement l'affaire. IE: mget -r * - dr.pooter
mmm. Le client FTP standard AFAIK sous Linux n'est pas conçu pour récupérer les répertoires de manière récursive. Je veux dire - il n'y a pas d'option -r. d'autres clients, tels que ncftp ou lftp, prennent en charge la récupération récursive, mais ils ne sont généralement pas disponibles par défaut. - Stann


Comme je l'ai dit, en vous connectant via FTP   m'emmène dans le dossier / home / admin,   et les fichiers dont j'ai besoin sont dans   / var / www / html

Je pense que cela fonctionnera dans votre cas:

wget -r ftp://192.168.0.1/../../var/www/html

1
2018-06-21 21:25