Comment télécharger un répertoire récursivement sur un serveur FTP en utilisant simplement ftp ou lftp?

19

J'écris un script shell Linux pour copier un répertoire local sur un serveur distant (en supprimant tous les fichiers existants).

Serveur local: ftp et les lftpcommandes sont disponibles, aucun ncftp ou aucun outil graphique.

Serveur distant: accessible uniquement via FTP. Pas de rsync ni SSH ni FXP.

Je pense à répertorier les fichiers locaux et distants pour générer un script lftp puis l'exécuter. Y a-t-il une meilleure façon?

Remarque: le téléchargement de fichiers modifiés uniquement serait un plus, mais pas obligatoire.

Nicolas Raoul
la source
ncftp est totalement hors de question? Ce serait plus simple à mon humble avis. (et je sais que ça le fera comme je l'utilise de cette façon)
Sirex
Sirex: Je préfère le faire avec des outils fournis par défaut sur RedHat. Si lftp s'avère inutilisable, j'ajouterai une exigence pour les utilisateurs d'installer ncftp.
Nicolas Raoul
La syntaxe pour wput(un ftp-uploader de type wget):wput dir/ ftp://user:pass@host/dir
kenorb

Réponses:

39

lftp devrait pouvoir le faire en une seule étape, en particulier avec lftp mirror:

EDIT: la syntaxe de la commande lftp prête à confusion, l'invocation d'origine que j'ai publiée ne fonctionne pas. Essayez-le comme ceci:

lftp -e "miroir -R {répertoire local} {répertoire distant}" -u {nom d'utilisateur}, {mot de passe} {hôte}

notez les guillemets autour des arguments du -ecommutateur.

Phil Hollenback
la source
1
+1 pour m'avertir que le mode miroir de lftp fonctionne même si FXP n'est pas disponible (j'étais convaincu du contraire après avoir lu tutorials.papamike.ca/pub/lftp.html qui dit "les deux serveurs doivent prendre en charge ce protocole pour que cette opération réussisse "). Cependant, cette commande particulière échoue sur mon serveur Ubuntu: lftp: mirror: nom ou service inconnu, commande inconnue `-R '.
Nicolas Raoul
J'ai reformulé ma réponse avec une meilleure invocation de lftp, j'espère que cela aide.
Phil Hollenback
Je l'ai finalement fait fonctionner! Il semble que vous devez basculer à distance et local pour que cela fonctionne. Veuillez mettre à jour et j'accepterai cette réponse. Voici une ligne de commande qui fonctionne: lftp -e "mirror -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteserver
Nicolas Raoul
Je pense que j'ai vu dans les documents lftp que vous deviez changer les répertoires local et distant lors de l'utilisation de -R mais j'ai dû oublier. Mis à jour ma réponse.
Phil Hollenback
Comment ça échoue? Avez-vous essayé d'exécuter 'lftp -vvv' pour une sortie plus détaillée afin de déterminer ce qu'il essaie de faire?
Phil Hollenback
1

Basée sur l'idée de Phil d'utiliser le mode miroir de lftp, cette commande fait l'affaire:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

Un inconvénient est que le serveur local doit avoir un serveur FTP en cours d'exécution.

Nicolas Raoul
la source
1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

Cela a fonctionné pour moi, de nombreuses autres tentatives ont échoué. Une fois dans lftp, plus d'informations disponibles via:

help mput
austin
la source
2
Il serait probablement préférable de l'utiliser mirror -Rici.
gauteh
@auteh tu as raison. meilleure réponse ^
austin
0

Enfin obtenu la réponse !!! Créer un script shell ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Path = répertoire local que nous voulons copier dans le serveur ftp
  • nom d'utilisateur = nom d'utilisateur du serveur ftp
  • mot de passe = mot de passe du serveur ftp
  • ftp-server-ip = adresse IP du serveur ftp

Si le package lftp n'est pas installé, il l'a installé en utilisant yum.

Kiran Zinjurde
la source