script ftp dans un batch dos

script ftp dans un batch dos - Shell/Batch - Programmation

Marsh Posté le 31-03-2006 à 11:33:01    

Bonjour,
 
Je souhaiterai créer un batch qui se connecte en ftp sur une machine UNIX.
et qui me copie certains fichiers en mode de transfert ASCII
dans un repertoire en local nommé c:\controle quotidien
 
Ma machine est sous Windows 2000.
 
Voici ci dessous chaque chemin de ma machine distante UNIX ainsi que le type de fichier à recuperer :
 
dans /recuperation/recap/jour ==> je voudrais recuperer tous les fichiers commencant par RECAPE_III
 
dans /recuperation/recapfgh/jour ==> je voudrais recuperer tous les fichiers commencant par RECAPE_e10
 
 
dans /recuperation/historaaa/jour ==> je voudrais recuperer tous les fichiers commencant par COIHISTOT
 
dans /recuperation/historbbb/jour ==> je voudrais recuperer tous les fichiers commencant par FARHISTOT
 
 
dans /recuperation/depart/transfert ==> je voudrais recuperer tous les fichiers commencant par pttft05
 
 
dans /recuperation/splEtatHYT
 
je voudrais recuperer tous les fichiers ci-dessous :
 
ghest1330.12206.txt
ghest1330.12906.txt
ghest2702.12206.txt
ghest2702.12906.txt
ghest2702.19506.txt
 
dans /recuperation/splEtatUIJ
 
je voudrais recuperer tous les fichiers ci-dessous :
 
gast1330.12206.txt
gast1330.12906.txt
gast1702.12206.txt
gast1702.12906.txt
 
 
dans /recuperation/history/jour
 
comy8032_2. avec 14 chiffres quelqonque derriere le point
 
 
 
dans /recuperation/history/UUU/Rappro/RECAP
 
tous les fichiers commencant RECAEt. suivi de la date du jour -1 exemple ==> RECAEt.060330
 
 
 
Merci d'avance pour vos réponses worthy.gif ,
 
Bien cordialement,
 
NikoZozo

Reply

Marsh Posté le 31-03-2006 à 11:33:01   

Reply

Marsh Posté le 31-03-2006 à 12:21:24    

Et où es-tu bloqué ?
 
Poste ton script actuel.

Reply

Marsh Posté le 31-03-2006 à 22:53:05    

Bonsoir nglechau,
 
Merci pour ta reponse. Voici mes scripts actuels (recuperation de fichiers sur serveur distant)
 
- Description de mon fichier testscript.bat :
 
echo off
clear
cd "C:\fichier pour essai transfer sur mon ftp\fichiers tests recup ftp\"
ftp -i -v -n -s:"C:\fichier pour essai transfer sur mon ftp\fichiers tests recup ftp\testscript.txt"
echo Fin du transfert FTP
pause
 
---------------------------------------------------------
 
- description de mon fichier testscript.txt (commande ftp):
 
open @IP
user login
password
hash
lcd "C:\fichier pour essai transfer sur mon ftp\fichiers tests recup ftp"
cd /recuperation/recap/jour/
pwd
bin
mget RECAPE_III*
cd /recuperation/recapfgh/jour/
pwd
bin
mget RECAPE_e10*
cd /recuperation/historaaa/jour/
pwd
bin
mget COIHISTOT*
cd /recuperation/historbbb/jour/
pwd
bin
mget FARHISTOT*
cd /recuperation/depart/transfert/
pwd
bin
mget pttft05*
cd /recuperation/splEtatHYT/
pwd
bin
mget ghest1330.12206.txt
mget ghest2702.12206.txt
mget ghest2702.12206.txt
cd /recuperation/splEtatUIJ/
pwd
bin
mget gast1330.12206.txt
mget gast1702.12906.txt
mget gast1702.12206.txt
cd /recuperation/history/jour/
pwd
bin
mget comy8032_2.*
cd /recuperation/history/UUU/Rappro/RECAP/
pwd
bin
mget RECAEt*
bye
 
Mon batch marche bien, mais voici mes quelques petits problemes, que je n'arrive pas à resoudre :  
 
- Pour plus de securite (eviter le stockage du mot de passe en clair),  
Il faudrait qu'au lancement de mon batch, celui-ci me demande le login et le pass puis effectue la suite du traitement en automatique.
 
- Pour la tache concernant le fichier pttft05, une fois ce fichier rapatrier en local, le fichier present sur le serveur distant  
devra etre mv dans un repertoire $YYYOJ1 (present egalament sur le serveur distant)
 
- Pour la tache concernant le fichier comy8032_2., il faudrait que je trouve un moyen pour que mon script recupere uniquement les fichiers
commencant par comy8032_2. suivi de 14 chiffres pour eviter de prendre egalement les fichier ayant la meme nomination et se terminant par .complet
 
et pour finir, pour la tache concernant la recup de ce type de fichiers RECAEt* , il faudrait que celui-ci me recupere  
seulement les fichiers commencant par RECAEt. suivi de la date du jour -1 exemple ==> RECAEt.060330
 
Merci pour votre aide, car je ne vois pas du tout comment faire.  
 
Bien cordialement,
 
Nikozozo

Reply

Marsh Posté le 31-03-2006 à 23:11:47    

Alors, puisque :
- le login/mot de passe ne doit pas être stocké en clair ;
- il y un modèle précis de nom de fichier pour certains cas ;
- il y a la dépendance de la date du jour
 
je te suggère de générer quotidiennement testscript.txt directement dans testscript.bat, où :
- le login/mot de passe sera demandé à l'utilisateur ou devra être passé en argument ;
- les fichiers dans le cas de comy8032_2.*.complet seront supprimés après le mget (je réfléchis à une optimisation de ce cas) ;
- la date d'hier est calculée en fonction de la date du jour.
 
Pour le cas de comy8032_2., je pense qu'un put vers le nouveau répertoire suivi d'un delete dans l'ancien devra suffire.

Reply

Marsh Posté le 31-03-2006 à 23:25:56    

OK,
 
mais je t'avoue que je ne vois pas trop comment générer quotidiennement testscript.txt directement dans testscript.bat (Pour tout te dire, j'ai deja eu un peu de mal à créer mes deux petits scripts precedent en solo)  :-)
Mais content d'y etre arrive à bout. enfin presque ! si je suis la  :-)
 
Je pense malgré tout m'en sortir pour le cas de comy8032_2 grace à toi.
 
Mais pour le reste la c'est une autre pair de manche.
 
Merci pour ton aide concernant ces points qui restent encore dans le noir pour moi.
 
Cordialement,
 
Nikozozo
 

Reply

Marsh Posté le 31-03-2006 à 23:39:36    

OK. Pour faire simple, tu as la redirection de la sortie d'une commande vers un fichier.
 
Donc si tu fais :
echo open @IP>testscript.txt
echo user>>testscript.txt
tu as déjà deux premières lignes de testscript.txt.
 
Ces lignes (echo) tu les places avant ta ligne  
ftp -i -v -n etc.
 
Un topic tout récent qui peut t'aider à y voir plus clair :
http://forum.hardware.fr/hardwaref [...] 7555-1.htm
 

Reply

Marsh Posté le 10-04-2006 à 20:59:51    

Bonsoir nglechau, bonsoir à tous
 
Voici ci-dessous mon script batch DOS preque finished (log transfert + possibilité de récupération de fichiers avec la date du jour).  
Mais mon problème est que je n'arrive pas à glisser la fonction Input a la place de ces 2 lignes :
 
fonction Input ==> http://www.phenixinformatique.com/ [...] e&artid=31
 
ECHO USER  >> ftpReport.txt et ECHO PASWWORD >> ftpReport.txt
 
Je voudrais que pour ces deux lignes :  
Le LOGIN et PASS soit renseigné dans la fenêtre DOS par l'utilisateur.
 
Quelqu'un pourrait me donner la bonne synthaxe avec la fonction Input ou alors l'utilisation de deux variables pour le stockage du LOGIN et PASS, en remplacement de ces 2 lignes.
 
Ces 2 variables devront être initialiser à la fin de mon batch.
 
NB : Je parle des variables car apparemment la commande Input n'est pas dispo d'origine sur tous les systèmes (OK sur Windows 2000 & NOK sur XP, je pense meme qu'elle n'est disponible qu'après avoir installé powerbatch).
 
Merci à tous pour votre aide.
Vous remerciants par avance.
 
Cordialement,
 
NikoZozo
 
    ------------------------------------------------
  VOICI MON BATCH DOS
------------------------------------------------
 
cd "C:\fichier pour essai transfer sur mon ftp\fichiers tests recup ftp\"
 
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET DATE=%%B  
set jour=%DATE:~0,2%  
set mois=%DATE:~3,2%  
set annee=%DATE:~8,2%  
set datej=%JOUR%%MOIS%%ANNEE%
 
ECHO ################################### >> log.txt
ECHO # DEBUT TRANSFERT FTP DU %datej%       # >> log.txt
ECHO ################################### >> log.txt
 
 
ECHO open xxx.xxx.xx.xx > ftpReport.txt  
ECHO USER  >> ftpReport.txt  
ECHO PASWWORD >> ftpReport.txt  
ECHO lcd "C:\fichier pour essai transfer sur mon ftp\fichiers tests recup ftp" >> ftpReport.txt  
ECHO cd /recuperation /recap/jour/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget RECAPE_III* >> ftpReport.txt  
ECHO cd /recuperation/recapfgh/jour/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget RECAPE_e10* >> ftpReport.txt  
ECHO cd /recuperation/historaaa/jour/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget COIHISTOT* >> ftpReport.txt  
ECHO cd /recuperation/historbbb/jour/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt ECHO bin >> ftpReport.txt  
ECHO mget FARHISTOT* >> ftpReport.txt  
ECHO cd /recuperation/depart/transfert/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget pttft05* >> ftpReport.txt  
ECHO cd /recuperation/splEtatHYT/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget ghest1330.12206.txt >> ftpReport.txt  
ECHO mget ghest2702.12206.txt >> ftpReport.txt  
ECHO mget ghest2702.12206.txt >> ftpReport.txt  
ECHO cd /recuperation/splEtatUIJ/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget gast1330.12206.txt >> ftpReport.txt  
ECHO mget gast1702.12906.txt >> ftpReport.txt  
ECHO mget gast1702.12206.txt >> ftpReport.txt  
ECHO cd /recuperation/history/jour/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget comy8032_2.* >> ftpReport.txt  
ECHO cd /recuperation/history/UUU/Rappro/RECAP/ >> ftpReport.txt  
ECHO pwd >> ftpReport.txt  
ECHO bin >> ftpReport.txt  
ECHO mget RECAEt* >> ftpReport.txt
 
ECHO bye >> ftpReport.txt    
 
ftp -i -n -s:"C:\fichier pour essai transfer sur mon ftp\fichiers tests recup ftp\ftpReport.txt" >> log.txt
 
del ftpReport.txt
 
ECHO ################################### >> log.txt
ECHO # FIN TRANSFERT FTP DU %datej%       # >> log.txt
ECHO ################################### >> log.txt

Reply

Marsh Posté le 12-04-2006 à 19:49:51    


Bonsoir à tous et un grand merci à nglechau :
 
Voici donc la solution pour demande du LOGIN & PASSWORD à l'utilisateur :
 
Il suffit de copier les lignes suivantes :
 
CODE
 
set /P USER="Nom de l'utilisateur : "
set /P PASSWORD="Mot de passe : "
echo %USER% >>ftpReport.txt
echo %PASSWORD% >>ftpReport.txt
 
Puis les coller à la place de ces 2 lignes :
 
ECHO USER  >> ftpReport.txt  
ECHO PASWWORD >> ftpReport.txt  
 
Et le tour est joué enfin presque, puisque je tombe à nouveau sur un autre problème :
 
J'ai pensé utiliser la commande mget * ou mget *.* dans un autre batch dans le même genre avec recuperation en local de toute une arboresance d'un repertoire distant.
Mais cela ne me recupère que les fichiers et pas ceux présent dans des sous repertoires de répertoire.
 
Voici ce que j'ai trouvé sur la commande mget sur le net :
 
mget et mput ne sont pas destinés au transfert de sous-arbres entiers de répertoires de fichiers.
 
J'aimerais quand même bien savoir comment FileZilla se débrouille pour le transfert de sous-arbres entiers de répertoires de fichiers ???
 
Je trouve quand même bizarre que "le Bilou" n'est pas prévu cette fonction de transfert ftp de fichiers et repertoires dans son système d'exploitation.
 
Autant dire que si quelqu'un trouve la manip ou une commande ftp qui m'aurait échappé, je suis plus que preneur !!!
 
NB : A noter que si cela n'est pas possible en batch, et que cette fonction existe en vbs par un filtre quelquonque, je suis également preneur :-)
 
Sauf que côté vbs je ne métrise plus du tout.
 
Merci pour votre aide.
 
@+
 
NikoZozo  
 

Reply

Marsh Posté le 13-04-2006 à 09:59:26    

nikozozo a écrit :

mget et mput ne sont pas destinés au transfert de sous-arbres entiers de répertoires de fichiers.


Exact. mget et mput sont destinés à transférer des fichiers en utilisant des caractères de généricité pour les noms (comme l'étoile)
 

nikozozo a écrit :

J'aimerais quand même bien savoir comment FileZilla se débrouille pour le transfert de sous-arbres entiers de répertoires de fichiers ???


FileZilla (ou tout autre logiciel de ftp graphique) récupère la liste des fichiers et répertoires. Ensuite
1) il transfère les fichiers
2) il relance son algo pour chaque répertoire trouvé (c'est ce qu'on nomme un "algo récursif" )
D'ailleurs, si tu regardes bien les infos qui passent dans la fenêtre du haut, tu verras que FileZilla se connecte plusieurs fois...
 

nikozozo a écrit :

Je trouve quand même bizarre que "le Bilou" n'est pas prévu cette fonction de transfert ftp de fichiers et repertoires dans son système d'exploitation.


Tu fais erreur, le protocole "FTP" n'a pas été inventé par Billou mais par les chercheurs américains de la Défense qui ont créé l'Arpanet (ancètre d'Internet). Le premier ftp date de 1971 et le protocole utilisé aujourd'hui date de 1975...
Ensuite, pourquoi prévoir une fonction de "transfert de répertoire" alors que  
1) il existe une floppée de logiciels pour ça (FileZilla, ftpExpert, LeechFTP, ftpCube, WS_FTP, etc...). Même Internet Explorer peut te connecter sur un site ftp. Il suffit que tu mettes dans la zone "adresse" une url de type ftp selon la syntaxe suivante:  
"ftp://<user>:<mot de passe>@host"
Exemple:ftp://ftp.proxad.net => Site FTP de Mandrake
2) Le protocole "SMB" inventé par Billou permet le partage de fichiers et répertoires
???
 

nikozozo a écrit :

Autant dire que si quelqu'un trouve la manip ou une commande ftp qui m'aurait échappé, je suis plus que preneur !!!


Non. On peut pas transférer de répertoire en passant par le ftp en ligne de commande. Il n'a pas été fait pour ça. Le seul moyen de transférer une arborescence d'un coup sans passer par un ftp graphique est de commencer par archiver l'arborescence dans une archive zip, rar ou tgz et de transférer l'archive...
 
Concernant ton script, tu peux l'alléger en enlevant les "echo bin" que tu mets un peu partout. Le mode de transfert est "ascii" (pour les fichiers texte) ou "bin" (pour tous les autres) mais une fois qu'il est positionné, il ne change plus.
Tu peux rajouter l'instruction "hash" qui affiche un "#" tous les 2048 octets transférés. Ca te permettra de voir la progression du transfert...

Message cité 1 fois
Message édité par Sve@r le 13-04-2006 à 10:20:14

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-04-2006 à 12:21:38    

Sve@r a écrit :

pourquoi prévoir une fonction de "transfert de répertoire" alors que  
1) il existe une floppée de logiciels pour ça (FileZilla, ftpExpert, LeechFTP, ftpCube, WS_FTP, etc...).


J'ajoute juste une remarque que si, cette fonctionnalité serait utile et plus pratique pour justement ces scripts de transfert, afin d'automatiser par exemple les tâches de sauvegarde quotidienne.
 
Il faudrait donc se trouver un client ftp supportant cette extension et le mode ligne de commandes.

Reply

Marsh Posté le 13-04-2006 à 12:21:38   

Reply

Marsh Posté le 13-04-2006 à 14:50:04    

wackevat a écrit :

J'ajoute juste une remarque que si, cette fonctionnalité serait utile et plus pratique pour justement ces scripts de transfert, afin d'automatiser par exemple les tâches de sauvegarde quotidienne.


On peut contourner le pb en archivant le répertoire dans un fichier zip (ou arj disponible en ligne de commande)
 

wackevat a écrit :

Il faudrait donc se trouver un client ftp supportant cette extension et le mode ligne de commandes.


Just do it (juste fais-le)...  :D

Message cité 1 fois
Message édité par Sve@r le 13-04-2006 à 14:51:28

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-04-2006 à 14:59:56    

Sve@r a écrit :

On peut contourner le pb en archivant le répertoire dans un fichier zip (ou arj disponible en ligne de commande)


Pour mput ok, mais pour mget, et que tu es en lecture-seule, ce n'est pas gagné !

Reply

Marsh Posté le 13-04-2006 à 17:29:29    

wackevat a écrit :

Pour mput ok, mais pour mget, et que tu es en lecture-seule, ce n'est pas gagné !


Ah yes. J'avais pas pensé à ça étant parti sur le fait qu'en étant maître de toute la chaîne, on n'avait pas de répertoire à récupérer étant donné qu'on n'en n'avait pas mis.
 
Ca devient un sujet de TP intéressant...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-04-2006 à 23:08:47    

Et hé !!!  bonsoir à Sve@r, nglechau, bonsoir à tous !
Je vois que ce topic fait reflechir plus d'une personne :-)
 
J'essaye de ne pas lacher l'affaire, mais je pense que mes recherches sont à temps perdus.
 
Dans un ultime espoir, j'ai donc essayer de pousser mes recherches dans cette direction :
 
script pour récupérer l'arborescence d'un ftp et la recréer,
fonction aspirateur de site
 
Mais je ne trouve pas grand chose. :-(
 
Malgré tout je suis tombé sur une commande qui à l'air plutot interessente celle-ci se nomme "wget" et est tout à fait porter sous windows.
lien : http://www.framasoft.net/article1871.html
 
Wget peut suivre les liens des pages HTML et XHTML et créer une copie locale de sites web distants,
en récréant complètement la structure du site original. Ceci est parfois désigné sous le nom de
« téléchargement récursif ».
 
"Options de répertoires
-nd
--no-directories
Ne pas créer la hiérarchie de répertoires lors du téléchargement récursif. Si cette option est
activée, tous les fichiers seront sauvegardés dans le répertoire courant, sans écrasement (si
un nom apparaît plus d'une fois, les noms de fichiers auront un suffixe numéroté .n).
-x
--force-directories
C'est l'opposé de -nd : créer une hiérarchie de répertoires, même si aucune n'aurait été créée
autrement. Par exemple, wget -x http://fly.srk.fer.hr/robots.txt sauvegardera le fichier
téléchargé dans le fly.srk.fer.hr/robots.txt.
-nH
--no-host-directories
Désactive la génération de la racine des répertoires avec le nom de l'hôte. Par défaut,
l'invocation de Wget avec -r http://fly.srk.fer.hr/ créera une hiérarchie de répertoires avec
fly.srk.fer.hr/ comme racine. Cette option désactive ce comportement.
--cut-dirs=n
Ignore les n composantes du répertoire. C'est utile pour contrôler finement le répertoire lors
du téléchargement récursif.
Par exemple, avec le répertoire ftp://ftp.xemacs.org/pub/xemacs/. Si vous le téléchargez
avec l'option -r, il sera sauvegardé localement sous ftp.xemacs.org/pub/xemacs/. Alors que
l'option -nH peut supprimer la partie ftp.xemacs.org/, vous êtes encore ennuyé avec
pub/xemacs. C'est là que l'option --cut-dirs est intéressante ; elle permet de cacher à Wget n
composantes du répertoire distant. Voici plusieurs exemples pour illustrer la fonctionnement de
l'option --cut-dirs option."
 
 
Je voulais donc avoir votre avis, serait t'il possible de faire quelque chose avec cette fonction wget, pour la recuperation dl'arborescence complete de mon serveur UNIX en local pour utilisation de suivi de version de fichiers avec subversion.
 
A noter que je pars justement sur un script pour eviter que les utilisateurs se trompent de fenetre dans un logiciel comme filezilla, en remonttant les données inverse. local ==> serveur au lieu de serveur ==> local
 
Merci encore pour votre aide.
Et a très biêntot je pense et puis d'ailleurs bonne nuit à tous pendant que j'y suis :-)
 
Nikozozo
 

Reply

Marsh Posté le 13-04-2006 à 23:14:42    

En complement d'info,
 
Voici de nouveau lien pour cette fonction wget utlisable en mode commande dos :
 
http://www.estvideo.com/dew/index/ [...] vis-octets
 
et
 
http://www.clubic.com/telecharger-fiche11202-wget.html
 
A+,
 
NikoZozo

Reply

Marsh Posté le 14-04-2006 à 20:05:00    

Je connaissais wget ;)
 
L'inconvénient principal, c'est que comme son nom indique, wget ne permet pas de faire du mput, ou quelque chose m'aurait échappé ? ;)
 
Si seul mget t'intéresse, teste ! Tu vas voir quelques trucs intéressantes comme .listing et autres ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed