Posez votre question Signaler

[Unix] FTP sous Unix [Résolu]

Trezeg 79Messages postés 20 décembre 2006Date d'inscription 3 octobre 2010Dernière intervention - Dernière réponse le 24 janv. 2007 à 14:44
Bonjour,
J'aimerais savoir s'il était possible de supprimer les demandes de confirmation lors d'un FTP sous Unix.
Plus precisemment, je voudrais lancer la commande suivante dans mon shell:
SRV_FILE=monServeur
CMD_DIR=monCompte/ftp
CMD_FILE=mesCommandes.cmd
SRV_FTP=monServeurCible
ftp -i $SRV_FILE/$CMD_DIR/$CMD_FILE $SRV_FTP
Le contenu du ficher CMD_FILE est le suivant:
ocpa
ftp_ocpa
binary
lcd ../data/Appli/Retour/PourTransmettre
rm -f PTZ_I
put PTZ
mv PTZ_I.LST PTZ_I
put PTZ_I
mv *.csv ./../Transmis
rm -f *.tmp
quit
Je voudrais que le contenu du fichier CMD_FILE puisse etre exécuté sans qu'il ne soit demandé de confirmation.
Merci pour votre aide.
Lire la suite 

[Unix] FTP sous Unix »

12 réponses
Réponse
+0
moins plus
Salut,

Regarde du côté de la commande "expect" (man expect) et :
http://www.oreilly.com/catalog/expect/chapter/ch03.html
http://expect.nist.gov/example/

;-))
Ajouter un commentaire
Réponse
+0
moins plus
Merci jipicy, mais je ne suis pas très à mon aise avec la langue de shakespeare... :-(
Cela dit, j'ai bidouillé un truc (que je ne peux hélas pas tester pour le moment) avec ce que j'ai compris de ces tutoriaux. La syntaxe suivante est-elle correcte ?
expect "Name*:"
send "ocpa\r"
expect "Password:"
send "ftp_ocpa\r"
expect "ftp>"
send "binary\r"
expect "ftp>"
send "lcd ../data/Appli/Retour/PourTransmettre\r"
expect "550*ftp>" exit "250*ftp>"
send "rm -f PTZ_I\r"
expect "550*ftp>" exit "250*ftp>"
send "put PTZ\r"
expect "550*ftp>" exit "200*226*ftp>"
send "mv PTZ_I.LST PTZ_I\r"
expect "550*ftp>" exit "200*226*ftp>"
send "put PTZ_I\r"
expect "550*ftp>" exit "200*226*ftp>"
send "mv *.csv ./../Transmis\r"
expect "550*ftp>" exit "200*226*ftp>"
send "rm -f *.tmp\r"
expect "550*ftp>" exit "200*226*ftp>"
send "quit\r"

Dois-je lancer le contenu de ce fichier (que je nomme CMD_FILE) de la manière suivante ?
$ ftp -i $SRV_FILE/$CMD_DIR/$$CMD_FILE $SRV_FTP.
Y a-t-il d'autres commandes à prévoir pour éviter que le prompt ftp ne me demande confirmation ?

Merci.

Trezeg
Ajouter un commentaire
Réponse
+0
moins plus
Re-hello,

J'ai pu finalement tester quelque chose utilisant "expect":
#!/bin/ksh
SRV_FTP=neptune.net
ftp -i $SRV_FTP
expect "Name*:"
send "opercti\r"
expect "Password:"
send "opercti\r"
expect "ftp>"
send "binary\r"
expect "ftp>"
send "lcd ../data/OCP/805178/RetourRAPI/PourTransmettre\r"
expect "550*ftp>" exit "250*ftp>"
send "put temoin\r"
expect "550*ftp>" exit "200*226*ftp>"
send "quit\r"
Voici ce que j'obtiens:
Connected to neptune.net.
220 neptune FTP server (Version 1.1.214.4(PHNE_23950) Tue May 22 05:49:01 GMT 20
01) ready.
Remote system type is UNIX.
Using binary mode to transfer files.
CCS-Init-extranet.sh: expect: command not found
CCS-Init-extranet.sh: send: command not found
CCS-Init-extranet.sh: expect: command not found
CCS-Init-extranet.sh: send: command not found
CCS-Init-extranet.sh: expect: command not found
CCS-Init-extranet.sh: send: command not found
CCS-Init-extranet.sh: expect: command not found
CCS-Init-extranet.sh: send: command not found
CCS-Init-extranet.sh: expect: command not found
CCS-Init-extranet.sh: send: command not found
CCS-Init-extranet.sh: expect: command not found
CCS-Init-extranet.sh: send: command not found 
Il n'aime pas trop les expect et send... Le problème est que le package n'est pas dans le systeme... Quelqu'un aurait une solution alternative pour utiliser ftp sans interaction ou bien le package est-il imperatif ? Dans ce cas, où le trouver ?
Merci infiniment,
Trezeg
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Essaie plutôt :
#!/usr/bin/expect -f

set force_conservative 1 ;

set timeout 2
spawn ftp -i neptune.net
expect "Name*:"
send "opercti\r"
expect "Password:"
send "opercti\r"
expect "ftp>"
send "binary\r"
expect "ftp>"
send "lcd ../data/OCP/805178/RetourRAPI/PourTransmettre\r"
expect "550*ftp>" exit "250*ftp>"
send "put temoin\r"
expect "550*ftp>" exit "200*226*ftp>"
send "quit\r"
;-))
Ajouter un commentaire
Réponse
+0
moins plus
Salut jipicy,
j'obtiens les memes messages d'erreur
./CCS-Init-extranet.sh[22]: spawn:  not found
./CCS-Init-extranet.sh[23]: expect:  not found
./CCS-Init-extranet.sh[24]: send:  not found
./CCS-Init-extranet.sh[25]: expect:  not found
./CCS-Init-extranet.sh[26]: send:  not found
./CCS-Init-extranet.sh[27]: expect:  not found
./CCS-Init-extranet.sh[28]: send:  not found
./CCS-Init-extranet.sh[29]: expect:  not found
./CCS-Init-extranet.sh[30]: send:  not found
./CCS-Init-extranet.sh[31]: expect:  not found
./CCS-Init-extranet.sh[32]: send:  not found
./CCS-Init-extranet.sh[33]: expect:  not found
./CCS-Init-extranet.sh[34]: send:  not found 
J'ai fouilé dans le /usr/bin mais je ne vois aucune trace de la commande expect
Amclt,
Trezeg
Ajouter un commentaire
Réponse
+0
moins plus
Re-

Le paquet n'est tout simplement pas installé peut être :-\
Ou alors il est ailleurs...

Fait une recherche avec :
whereis expect
ou avec :
locate expect
;-))
Ajouter un commentaire
Réponse
+0
moins plus
Hello,
Voici les résultats de mes recherches :
$ whereis expect
expect:
$ locate expect
ksh: locate:  not found
Je ne sais pas comment interpréter le résultat de ce whereis...
Est-ce un message d'erreur ?

Amclt,

Trezg
Ajouter un commentaire
Réponse
+0
moins plus
Re-

Je ne sais pas comment interpréter le résultat de ce whereis...
Est-ce un message d'erreur ?

Non, ça veut tout simplement dire qu'il ne trouve pas la commande dans les répertoires où elle serait susceptible de se trouver.
En deux mots, la commande n'est pas installée ;-(

;-)
Ajouter un commentaire
Réponse
+0
moins plus
Hello,
J'ai trouvé un truc qui marche à peu près :)))
#!/bin/bash
#!/bin/ksh
ftp -n $SRV_FTP <<Fin-de-Session
user $monUser $monPassword
binary
lcd ../data/OCP/805178/Retour/PourTransmettre
put temoin
delete temoin2
bye
Mais il y a un hic... Après avoir interpreté le Bye, le shell se termine avec le message suivant
Local directory now /data/OCP/805178/Retour/PourTransmettre
alors qu'il y a d'autres instructions qui suivent dans ce meme shell...
Y'aurait-il un moyen de continuer ? J'ai ajouté un & wait après le Bye mais rien n'y fait.

Merci

Trezeg
Ajouter un commentaire
Réponse
+0
moins plus
Re-

Essaie de mettre toute ta partie "ftp" entre parenthèses (afin de faire exécuter l'ensemble par un shell fils...) :
(
ftp -n $SRV_FTP <<Fin-de-Session
user $monUser $monPassword
binary
lcd ../data/OCP/805178/Retour/PourTransmettre
put temoin
delete temoin2
bye
)
bla...
bla...
;-))
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

L'étiquette "Fin-de-Session" doit se trouver à la fin de ta session ftp, après le bye, pour que le reste de ton script cesse d'être envoyé sur le stdin de la commande ftp et continue d'être interprété par ton interpréteur de commandes.

Donc :

(...)
delete temoin2
bye
Fin-de-Session

(ici la suite de ton script)



Dal
Ajouter un commentaire
Réponse
+0
moins plus
Ca marche NI-KEL :)))
Merci à vous deux !

Trezeg
Ajouter un commentaire
Ce document intitulé « [Unix] FTP sous Unix » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook