web-dev-qa-db-fra.com

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

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

Serveur local: Les commandes ftp et lftp sont disponibles, nonncftp ou tout autre outil graphique.

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

Je pense à lister 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.

19
Nicolas Raoul

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 -e commutateur.

40
Phil Hollenback
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
1
austin

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.

1
Nicolas Raoul

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.

0
Kiran Zinjurde