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

93

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 traiter 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:[email protected]

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?


la source
2
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:

125

Essayer -mde--mirror

wget -m ftp://username:[email protected]
Dave Cheney
la source
15
Pour des raisons de sécurité, il serait bon --ask-passwordde ne pas conserver le mot de passe history.
checksum
C'est trop cool. A 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.
@WasimA., Vous pouvez simplement ajouter un chemin de répertoire ici:wget -m ftp://username:[email protected]/mydir/
Alex Che
37

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

wget -r ftp://username:[email protected]/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.

Banee Ishaque K
la source
1
Cela n'irait que dans un seul répertoire. Mieux vaut utiliser le drapeau -m
dimanche
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 de ce type. ** wget -r ftp: / / nom d'utilisateur% 40host: mot de passe @ host / dir / **
Wasim A.
Remarque: vous devez utiliser soit, -msoit -r -l infparce que -r a une profondeur de récursivité de 5. Voir gnu.org/software/wget/manual/…
ndemou
7

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.

Zappan
la source
5

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'.

chmeee
la source
curlftpfsa de gros problèmes de performance pour le moment, sauf si vous rétrogradezlibcurl3-gnutls
Hengjie
5

Vérifiez la commande wget ci-dessous pour télécharger les données à partir 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 ayant le même nom que l'URL, c.-à-d. 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.

AVJ
la source
2

Utilisation:

wget -m ftp://192.168.0.1

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

Rajat
la source
Comme je l'ai dit, la connexion via FTP m'emmène dans le dossier / home / admin, et les fichiers nécessaires 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 l'exécuter 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.
1

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

goo
la source
Je ne peux pas installer plus de logiciels sur mon nouveau serveur. Est-ce que je ne devrais pas demander à wget de télécharger tous les fichiers depuis / var / www / html? J'ai essayé wget -r nom d'utilisateur: [email protected]/var/www/html mais j'ai eu une erreur de répertoire introuvable.
1

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.

dr.pooter
la source
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?
En fonction de votre client, le commutateur -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
1

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.

Je pense que cela fonctionnera dans votre cas:

wget -r ftp://192.168.0.1/../../var/www/html
Kubanczyk
la source
0

Je suis tombé sur un hébergement Windows avec le nom d'utilisateur brinkster / nom d'utilisateur, donc wget génère une erreur si vous utilisez la syntaxe:

wget -m ftp://brinkster/username:[email protected]

Pour dépasser cela, utilisez

wget -m ftp://brinkster%2Fusername:[email protected]

J'ai dû faire face à cela avec Windows hosting @ brinkster.

Anto Joseph
la source
-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename fera le travail ou vous pouvez ajouter * au lieu de nom de fichier entring: fait penser à wget à un port invalide dans votre cas.

Khushwant Singh
la source
Cette réponse à une question vieille de quatre ans avec plusieurs réponses votantes ne propose rien de nouveau et omet même l'obligation de disposer d'une copie récursive.
Sven