web-dev-qa-db-fra.com

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

Je souhaite copier tous les fichiers et dossiers d'un hôte à un autre. Les fichiers sur l'ancien hôte se trouvent dans/var/www/html et 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 depuis 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 récursivement sur FTP?

97
user9406

Essayez -m pour --mirror

wget -m ftp://username:[email protected]
129
Dave Cheney

Vous avez raison, vous avez juste besoin d'un suivi * à 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, donc la première commande wget ne fonctionne pas et la deuxième commande fonctionne très bien.

39
Formoda

Outre wget, vous pouvez également utiliser lftp en mode script. La commande suivante mettra 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 de laquelle télécharger les données.

7
zappan

Vérifiez la commande wget ci-dessous pour télécharger les données du 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 destiné au téléchargement récursif.

-np: Est pour aucun parent ascendant.

-nH: Sert à désactiver la création d'un répertoire portant le même nom que l'URL, c'est-à-dire abc.xyz.com

--cut-dirs: Sert à 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.

5
AVJ

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 fichiers normaux comme 'cp -r'.

5
chmeee

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
Bojan Hrnkas

Devrait travailler essayer:

wget -r ftp://ftp:[email protected]/tst/
2
rkthkr

Utilisation:

wget -m ftp://192.168.0.1

et il reflétera tous les fichiers et dossiers.

2
Rajat

Comme je l'ai dit, la connexion via FTP m'amène au dossier/home/admin, et les fichiers dont j'ai besoin se trouvent dans/var/www/html

Je pense que cela fonctionnera dans votre cas:

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

C'est la bonne syntaxe. Je ne sais 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
goo

Je peux comprendre si vous essayez de vider ceci dans cron ou quelque chose, mais pourquoi ne pas simplement ftp dans le serveur avec votre client normal et mget *? Cela pourrait être un chemin plus rapide vers le succès.

1
dr.pooter

Je suis tombé sur un hébergement Windows avec le nom d'utilisateur comme brinkster/username, donc wget lèverait 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 l'hébergement Windows @ brinkster.

0
Anto Joseph