Ce mémo a pour objectif d'expliquer comment automatiser le transfert d'un fichier par FTP. Pratique lors de la création de passerelles.
Prérequis: un serveur FTP. Le compte FTP utilisé est chrooté dans le dossier dans lequel doivent être déposés les fichiers. Pour créer le serveur FTP, ce billet donne la solution.
Pour le moment, on va faire un truc simplissime:
Je crée 3 fichiers

- script.bat est le script qui lancera le transfert. Il sera mis en tâches planifiées (pour ça, je vous laisse trouver comment on fait)
- plannings_Extranet.ftp est la liste de commandes à éxécuter en FTP pour basculer les fichiers vers le repertoire FTP. Vous l'avez compris, la petite passerelle que je suis en train de faire a pour but de basculer les planings sur notre extranet.
- Plop.txt est le fichier qui sera transféré; C'est juste pour le test hein!
script.bat
Il contient juste une ligne pour le moment.
ftp -s:planings_Extranet.ftp
Il lance le client dos ftp, qui prendra la liste d'instructions contenues dans le fichier planings_Extranet.ftp
planings_Extranet.ftp
open 192.168.10.253 user password prompt lcd D:\testFtp put plop.txt quit
Explication ligne par ligne:
- 1 Ouvrir la connexion vers le serveur 192.168.10.253
- 2 Lui indiquer l'user FTP
- 3 Lui indiquer le mot de passe ftp
- 4 Attendre le prompt
- 5 Se placer localement dans le repertoire comprenant le(s) fichiers à transférer
- 6 envoyer le fichier
- 7 fermer la connexion
plop.txt
Bah, c'est le fichier à transférer; OSEF?
Lancez script.bat, vérifiez sur le serveur de destination si le fichier a bien été poussé.
Un peu plus compliqué; On va pousser tous les fichiers d'un répertoire et créer un fichier de logs.
Prérequis, télécharger curl
Pour se simplifier un peu la vie, cette fois, on va utiliser curl. Téléchargez l'éxécutable qui correspond à votre version de windows: http://curl.haxx.se/download.html Je me créé l'architecture suivante sur le windows;
- testFtp
- script.bat
- bin
- curl.exe
- license_curl.txt
-
toSend
- fichier1.pdf
- fichier2.pdf
- fichier3.pdf
l'objectif est d'envoyer les fichiers (quelque soient leur noms) du dossier toSend sur notre ftp. Par contre si le fichier existe déja sur le serveur; je l'écrase.
Transfert automatique en écrasant les éventuels fichiers sur le serveur
Voici le contenu du scrip.bat
::Envoie le contenu d un repertoire sur un dossier FTP. Ecrase les fichiers déja existants si des noms sont concordants ::Ce script utilise Curl (pour le ftp). La licence se situe dans le dossier bin cls ::On met un titre au shell @title Envoie le contenu d un repertoire sur un dossier FTP. Ecrase les fichiers déja existants si des noms sont concordants ::Supprimer les retours écran @echo off ::#### VARIABLES#### ::PARTIE FTP set user_ftp=userFtP set pwd_ftp=pwdFtp set ip_ftp=192.168.10.253 set path_ftp=/ ::DOSSIER LOCAL A TRANSFERER set local_path=%cd%\toSend ::Définition des Chemins ::répertoire racine set rep_root=%cd% ::chemin des binaires set rep_bin=%cd%\bin ::chemin des fichiers de journaux set rep_log=%cd%\log ::Si le ping est négatif, quitter et logguer ping -n 1 %ip_ftp% if %errorlevel%==1 goto NO_LINK_SERV ::On envoie cd %local_path% ::Eventuellement, remplacez *.* par le filtre de votre choix genre planing-*.pdf dans la partie qui suit if exist ./*.* ( FOR %%f IN (*.*) DO ( ::Envoi de chaque fichier sur le ftp %rep_bin%\curl.exe -u %user_ftp%:%pwd_ftp% -Q "+CWD %path_ftp%" -T "%%f" ftp://%ip_ftp%/ ::On logue les infos dans un fichier echo "%date%|%time:~0,2%h%time:~3,2% : fichier %%f -- envoyé " >>%rep_log%/envois.log ) ::On supprime les fichiers après l envoi car on en a plus besoin del/Q *.*) GOTO FIN :NO_LINK_SERV ::le serveur ne répond pas au ping echo "%date%|%time:~0,2%h%time:~3,2% : Le serveur FTP n'est pas joignable - Aucun transfert effectué" >>%rep_log%/connexions.log :FIN ::On quitte
Plus qu'à mettre le script dans les tâches planifiées.

batch
Commentaires
C'est beau! J'aime
Je pense que je vais m'en inspirer pour quelques routines d’administration. Merci