Créer une routine de transfert FTP 3

Il y a peu j’ai eu à mettre en place un transfert quotidien depuis un serveur FTP distant jusqu’à un serveur de fichiers local. Premièrement, ayant un Windows Serveur 2008 R2 sur le serveur local, la question de l’exécution quotidienne de la tâche ne se posait pas : Planificateur de tâches ! Cet outil d’administration est l’équivalent du « cron » dans un environnement Linux, et permet de gérer énormément de paramètres et de conditions à l’exécution redondante d’une tâche.

Ce qui allait poser plus de problème, c’était le script.

Bon, je me suis tout d’abord orienté vers FTP.exe, le client FTP par défaut de Windows, qui fonctionne d’ailleurs très bien. Mais dans mon cas, comme le serveur distant ne fonctionnait pas en mode « passif », c’est à dire qu’il utilise plusieurs ports pour les transferts et pas seulement le port 21, je n’ai pas pu mettre ceci en place. Si toutefois vous voulez quelques explications :

Utilisation de FTP.exe

On peut utiliser FTP.exe depuis une invite de commande, et celui-ci peut se connecter à un serveur de la façon suivante :

  1. On entre la commande suivante :
    ftp -s:chemin_fichier\mon_fichier.txt
  2. Le fichier en question, est un fichier contenant les informations nécessaires à la connexion :
    open nom_dhote 
    nom_dutilisateur 
    mot_de_passe

Dans ce même fichier, à la suite, on précise quel mode de transmission on désire : binary ou ascii :

bin :: pour binary
ascii :: pour ascii

Ensuite, il suffit de monter le répertoire de destination/source, (selon si on veut copier ou récupérer des fichiers) du côté serveur ftp, avec un cd. Par exemple :

cd /home/documents

Ensuite on monte le répertoire local dans lequel on veut récupérer/copier les fichiers, du côté client ftp, grâce à :

lcd C:\Windows\docs

Et pour finir on execute notre transfert grâce à mput ou mget :

  •  Ici, on va copier depuis C:\Windows\docs tout les fichiers .txt sur le serveur, dans /home/documents
    mput *.txt
  •  Ici, on va copier depuis /home/documents tout les fichiers .gif sur le client, dans C:\Windows\docs
    mget *.gif

Bon, et on oublie pas de terminer en disant « bye » ! Non, sans rire, pour couper les connexions, il faut réellement préciser l’instruction bye.

Au final notre fichier mon_fichier.txt donnera ceci (en exemple pur) :

open ftp.chateauversailles
louis14
secret
bin
cd /var/www/html
lcd C:\wamp\www
mget *
bye

On récupère depuis le ftp, tout le contenu de /var/www/html et on le copie dans C:\wamp\www.

Mais bon, FTP.exe ne supporte pas le mode passif, donc j’ai du me tourner vers ncftp.exe.

Utilisation de ncFTP.exe

ncFTP.exe est un logiciel gratuit, non-natif à Windows.

On peut donc télécharger ncFTP ici : http://www.ncftpd.com/ncftp/ et utiliser les petits programmes fournis avec, à savoir ncftpget.exe ou ncftpput.exe, dans des scripts assez facilement.

La doc est ici :

Mais pour donner un petit exemple d’utilisation de récuperation de fichiers sur un FTP:

@echo off
%windir%\ncftpget.exe –f nom_fichier_connexion –d fichier_log repertoire_destination repertoire_source/fichier(s)
  •  Ici, %windir%\ncftpget, permet l’éxécution depuis n’importe ou, car à l’installation, ncFTP marque son répertoire dans la variable d’environnement %windir%.
  • -f nom_fichier_connexion : pointe vers un fichier qui contient les infos de connexion sous la forme :
    open nom_dhote
    user nom_user
    pass mot_de_passe
  • -d fichier_log : n’est pas obligatoire, mais conseillé pour debugger d’éventuels problemes, qui seront majoritairement affichés dans ce fichier_log.
  • Et pour le reste nous avons la destination et la/les sources, séparées par un espace, ce qui n’est pas trop compliqué :p

Note : Attention à toujours utiliser les chemins complets (absolus) dans ce genre de script !

Et pour moi, après maints essais, plus de problèmes ! Ce logiciel très pratique me permet, lié au Plannificateur de tâches Windows, d’invoquer tout les jours en pleine nuit une copie de mes fichiers depuis mon serveur FTP.

 

 

3 thoughts on “Créer une routine de transfert FTP

  1. Répondre MisterGaets mar 16, 2018 9 h 28 min

    Bonjour,
    Cette solution est-elle fiable à 100% ?
    J’ai essayé de reproduire la même chose (à quelques lignes près), mais ça ne fonctionne pas comme il faut.
    Déjà, le login et le mot de passe ne sont pas pris en compte (alors qu’il sont renseignés juste après la connexion au serveur FTP).
    Je suis pourtant bien connecté au serveur FTP, je veux que mon script transfert tous les fichiers en .csv vers le serveur (ayant précisé le chemin absolu), mais il ne transfert qu’un seul fichier. Donc, cette solution ne marche pas ; alors que j’avais bien fait un « mput *.csv » dans le fichier de config.

    • Répondre Alexandre mar 16, 2018 14 h 24 min

      Bonjour,

      Normalement si mes souvenirs sont bons, on peut passer un wildcard (*) et donc mput *.csv devrait marcher. A l’époque je n’avais utilisé que le mget mais j’imagine que mput doit avoir la même syntaxe. A mon avis le problème viens effectivement de la connexion, le fichier transféré est-il complet ?

      • Répondre MisterGaets mar 16, 2018 14 h 38 min

        D’accord. Oui, les fichiers sont complets, le problème ne vient pas de là. Quant aux identifiants de connexion, je retire ce que j’ai dit. En fait, c’était bon.
        Par contre, je souhaite transférer tous mes fichiers
        sur un serveur FTP (donc dans un dossier à distance
        accessible sur mon poste).
        Est-ce que votre exemple marche aussi pour ce cas de figure ?

Laisser un commentaire