Récupération de fichiers par FTP - Shell/Batch - Programmation
Marsh Posté le 04-07-2008 à 11:48:34
T'as pas l'air d'avoir beaucoup chercher :
http://forum.hardware.fr/hfr/Progr [...] 8726_1.htm
http://forum.hardware.fr/hfr/Progr [...] 2139_1.htm
http://forum.hardware.fr/hfr/Progr [...] 8870_1.htm
Bref cherche, propose un code et s'il y a des erreurs cherche encore, et si tu trouves pas tu demandes.
Marsh Posté le 08-07-2008 à 21:13:43
blastkiller a écrit : T'as pas l'air d'avoir beaucoup chercher : |
Je veux que le script fasse les étapes suivantes :
1) Se connecter en ftp
2) Accéder au répertoire distant
3) Récupérer le fichier en date du jour (le fichier est en .dat)
4) Rapatrier ce fichier localement
5) Renommer les fichiers . dat en .xml
6) Quit
Voici une partie du code :
@echo off
echo open @ftp >ftp.txt
echo user utilisateur >ftp.txt
echo password password >ftp.txt
echo binary >ftp.txt
echo "chemin accès au répertoire distant">ftp.txt
echo get "%fichier.dat%" >ftp.txt
echo quit >ftp.txt
ftp -i -n -s:ftp.txt
pause
Il manquent quelques parties, pouvez vous m'aider car je ne m'y connais absolument pas !!!
Merci
Marsh Posté le 08-07-2008 à 22:48:05
Imaginons le fichier a recuperer sur le ftp est dans le dossier /test/
et se nomme fichier.dat
on veut le stocker dans c:\ftpfiles\
le serveur ftp est ftp.test.fr
l'utilisateur est blastkiller
et le pass est pgm
@echo off
cd c:\ftpfiles\
echo open ftp.test.fr> ftp.txt
echo user blastkiller>> ftp.txt
echo password pgm>> ftp.txt
echo binary>> ftp.txt
echo cd /test>> ftp.txt
echo get fichier.dat>> ftp.txt
echo quit>> ftp.txt
ftp -i -n -s:ftp.txt
del ftp.txt > NUL
pause
Marsh Posté le 08-07-2008 à 23:44:47
Peux tu me dire à quoi sert "echo binary" ? et la différence entre > et >> ?
Sinon merci pour ton aide. Je n'étais pas très loin je trouve ;-)
Marsh Posté le 09-07-2008 à 11:20:46
binary c'est un mode de transfert FTP, t'es pas obligé de le mettre.
">" permet de rediriger la sortie, là c'est vers ftp.txt
la difference entre ">>" c'est que ">>" écrit a la suite du fichier tandis que ">" va réécrire le fichier entierement. Fais des tests si tu vois pas très bien
Marsh Posté le 09-07-2008 à 11:27:51
Ok ! Merci pour ton aide je vais l'essayer dès que je peux !! :-)
Marsh Posté le 09-07-2008 à 13:44:31
J'ai une erreur lors de lancement. Dès que je fais open il me met "hôte inconnu" et je passe en ftp> !
Marsh Posté le 09-07-2008 à 16:27:39
open adresse_Ip_ftp !
Et à chaque fois, il me dit non connecté ou accès refusé !
Marsh Posté le 09-07-2008 à 18:21:49
ben écoute là sa vient pas du code mais du server ftp ou de toi qui a fais une erreur chepa où. J'peux pas t'aider, envoi en message privée tout ton code que t'as mis stp
Marsh Posté le 22-10-2008 à 14:40:11
Topic trés intéréssant qui risque de me servir.
Pour ma part je bloque juste niveau script windows sur comment envoyer une foule de fichier. Je m'explique.
JE dois faire un script qui va sur un ftp récupérer tous les fichiers qui s'y trouvent. (leur nom est à définir mais s'il y en a plusieur par jour, il faut prendre en compte que je ne connaitrais pas leur nom).
Donc je dois récupérer ces fichiers avec un get. Ces fichiers seront traités par un logiciel qui en produira d'autre et ces autres fichiers devront être uploadé sur le serveur.
ma question est donc comment télécharger tous ces fichiers et puis les re uploader? En sachant que je ne connais pas leur nom et qu'il peut y en avoir plusieurs?
J'ai vu diverses idées avec un ls sur le serveur redirigé vers un fichier txt puis traiter ce fichier, mais bon ça ça marcherait:?
Code :
|
En sachant que dans cmd je risque de mettre ça:
Code :
|
Et pour uploader un dir > liste.txt
et là même chose que pour downloader mais avec un put ça devrait le faire??
Le problème c'est quoi utiliser au niveau de dir pour ne récupérer que le nom des fichiers (équivalent à ls quoi)
EDIT: dir /B *.txt par exemple ne me donnera que les txt donc all is good.
Marsh Posté le 24-10-2008 à 19:57:27
Bonjour Burn2.
Pour recevoir plusieurs fichiers en même temps, il y a une commande sous FTP qui s'appelle "mget" (comme il y a aussi "mput" pour les envoyer).
A la suite, tu renseignes le nom des fichiers que tu veux transférer, avec les "jokers" éventuels (* ou ?)
Exemple :
mget MesFichiers*.txt
Si tu le fais à la main, tu te rendras compte qu'on te demandra confirmation avant chaque transfert de fichier.
Pour éviter ça, il existe une commande PROMPT, à mettre seule avant le mget (ou mput).
Apparemment ton problème est sous DOS, alors n'oublie pas de mettre ECHO devant tout ça.
J'espère que ça suffira pour te dépanner !
Au fait, tu tapes FTP tout seul, puis HELP, et ça te donne la liste des commandes disponibles.
Ensuite, tu tapes HELP UneCommande pour savoir ce que ça fait.
Marsh Posté le 24-10-2008 à 20:17:38
Bonjour, merci de ta réponse.
Ouep je savais pour help. Mais en fait ma solution marche au poil. J'ai fais un test et je récupère bien tous les fichiers présents dans ce répertoire.
Marsh Posté le 25-10-2008 à 15:29:31
ReplyMarsh Posté le 25-10-2008 à 16:10:23
Je@nb a écrit : pk tu n'utilises pas un outil tout fait ? style wget ? |
Parce que le pc est sous windows 98, que c'est du temporaire, et que le but c'est d'aller chercher automatique des fichiers sur un ftp, les mettres dans un répertoire, c'est traité puis une fois traité tout re upper sur le serveur dans un autre répertoire.
Marsh Posté le 04-11-2008 à 09:41:18
Bon j'ai juste un petit problème. J'essaye de sécuriser un peu la chose, et donc dans le cas de l'upload vérifier que la liste des fichiers présents sur le serveur, correspond bien à ce que j'ai chez moi, en gros, que les fichiers que je viens d'upper y sont bien. Mais le problème, c'est que sur le serveur il peut rester des fichiers de la fournée précédente. Je voudrais donc juste voir si les fichiers présents dans mon répertoire local sont sur le serveur.
(que le serveur présente donc au moins les fichiers que je viens d'uploader).
Vous avez une idée de comment faire??? Je sais comment récupérer la liste de ce qui est présent sur le serveur ftp, mais je vois pas sous windows comment arriver à faire la comparaison en sachant que les dossiers peuvent êtres différents.
Et qu'en gros mon répertoire local est un sous ensemble du répertoire sur serveur.
LA seule idée que j'avais c'était de générer le fichier en fonction de la date du jour avant de l'uploader ce qui me permettrait de n'avoir que les fichiers du jours, mais bon c'est pas l'idéal car le problème se reposera si la manip se fait au moment de changer de jours...
La solution bateau c'est aussi de downloader les fichiers présents sur le serveur avant puis d'uploader tout mon contenu du répertoire je pourrais donc juste comparer qu'il y a bien tout.
Y a pas quand même linux c'est bien mieux foutu pour le script. Sous linux je ferais ça super facilement avec comparaison de taille de fichier pour être sûr que tout est bien transféré mais là ça me semble pas possible ou trés difficilement
Sinon autre solution qui me vient à l'esprit et qui est ce que je ferais sous linux:
Récupérer la liste des fichiers sur le serveur, lister mon répertoire local, et pour chaque ligne voir si je trouve une occurence dans le fichier sur le serveur.
sous linux je ferais un
isPresent=let 'grep "ligne" liste2.txt|wc -l'
et si c'est > 0 c'est qu'il y a une occurence, on peut faire pareil sous windows?
Je vois la première partie mais pas la deuxième en gros je vois comment rechercher la ligne mais pas compter le nombre de ligne
type "liste1.txt" |findstr /i /r "test1"
EDit visiblement ce n'est pas possible à la volée va faloir que je passe par un fichier texte temporaire et utiliser ce genre de chose:
Code :
|
EDIT2: je sens que je vais finir en C++..
Marsh Posté le 05-11-2008 à 06:42:21
bonjour,
je me permets de vous relancer sur ce post .
je recherche egalement la possibilité de recuperer un fichier .txt sur un serveur ftp
le rapatrier sur mon pc en local et le traiter dans une base de donnée mysql
merci pour votre aide
surtout pour traiter le fichier avec mysql
Marsh Posté le 05-11-2008 à 10:29:13
Bonjour, vous êtes sous quel os?
Sinon je pense que le plus logique, c'est de faire un script bat (ou sh si c'est sous linux) qui va aller récupérer ce fichier (très facile à faire) avec juste une commande ftp dedans. Puis faire un programme dans un langage qui vous correspond avec le drivers mysql et d'insérer dans la base de donnée en traitant ce fichier.
(C++ avec QT par exemple permet d'attaquer une base de donnée mysql directement).
Marsh Posté le 05-11-2008 à 17:41:57
bonjour ,
je suis sur windows , ou puis je avoir un debut de code ?
merci
Marsh Posté le 05-11-2008 à 17:51:35
Pour la récupération du fichier par ftp, tu as le code juste en haut.
Pour le code de l'insertion dans ta bd, c'est spécifique au langage que tu vas choisir et à ta base de donnée.
En gros tu déclares une base, avec les mots de passes etc, tu t'y connectes, et tu fais des requêtes dessus, après c'est de l'insert into ou de l'alter table normal quoi.
Marsh Posté le 04-07-2008 à 10:59:31
Salut tout le monde !!
Je suis novice en matière de script !!
On m'a demandé de créer un script qui serait capable de récupérer des fichiers se trouvent sur 3 serveurs aux heures prédéfinies (12h et 18h) sur 2 sites et le tout doit se faire par ftp. Les fichiers, ensuite doivent être rapatriés sur mon pc local.
J'ai commencé à chercher à droite à gauche.
Si quelqu'un peut m'aider à créer ce script, elle me dépannerai énormément !
Merci,
Elmoricq-edit : titre changé pour qu'il soit 1. explicite et 2. qu'il ne masque pas la catégorie du message (titre d'origine commençant par des crochets)
Message édité par Elmoricq le 08-07-2008 à 21:15:19
---------------
Que la paix soit avec toi mon ami(e) !