Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 16h44   #1
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Par défaut Prendre fichiers sur un ftp en envoyer vers destination

Bonjour,

J'aurai une petite question concernant un script que je fais en bash. Je sais que je suis dans la partie perl mais je n'ai pas trouvé où mieux placer le sujet.

Je souhaite me connecter sur un ftp, chercher le dernier fichier avec x ou y extension et envoyer mon fichier.x ou fichier.y vers un de mes serveurs.

Sauf que là il se connecte bien sur mon ftp, mais il effectue ma recherche sur le serveur d'où je lance le script

Code :
1
2
3
4
5
6
7
8
9
lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP
echo " The FTP Connection is successful "
 
VAR2=$(ls -t  *.tar | head -1)
if  [ $VAR2 ] ; then
	get $prendre du ftp $destination
else 
	echo "The file doesn't exist"
fi
D'ailleurs, comment faire dans le get pour prendre la source du ftp.
Merci
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2011, 19h23   #2
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 9 359
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 9 359
Points : 13 732
Points : 13 732
En Perl via le module Net::FTP, tu peux te connecter à un serveur FTP et t'y promener, récupérer ou déposer un fichier.
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 14/12/2011, 09h19   #3
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Mon problème est que j'ai déjà terminé le script et que je ne souhaite pas le refaire en perl.
En bash le mode lftp ne permet pas de poser des commandes directement?
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 10h55   #4
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 9 359
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 9 359
Points : 13 732
Points : 13 732
Ce n'est pas un forum Bash ici, si tu veux, je te bascule sur le forum Linux ?
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 11h14   #5
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
je veux bien merci djibril
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 11h41   #6
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
déjà ftp tu peux éviter de mêtre le password et le login dans le script.
voir : .netrc

ensuite pour scripter les commandes internes du ftp c'est pas la bonne méthode

il te faudra faire plutôt quelque chose comme

Code :
1
2
3
4
5
6
7
8
#ici tu es en shell
lftp -i $FTP << EOF
commande_interne_ftp1 #ici tu n'est pas dans un shell
commande_interne_ftp2 #ici tu n'est pas dans un shell
commande_interne_ftp3 #ici tu n'est pas dans un shell
bye
EOF
#ici tu es de nouveau en shell
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 11h50   #7
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Ok, je regarderai le .netrc
Dans un premier temps je vais déjà essayer de faire marcher les commandes

je fais donc :

Code :
1
2
3
4
lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP << EOF
!ls -t  *.tar | head -1
bye
EOF
Après si telle extension existe sur le ftp, je le transfère en local dans un dossier
mais déjà le ls ne fonctionne même pas. J'ai essayé avec ! et sans ! et c'est pareil il ne trouve rien

Ai-je oublié quelque chose?
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 11h59   #8
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
J'ai trouvé l'erreur, j'avais un espace en trop entre -t et *
Du coup il me liste tout

Par contre, comment faire en sorte que ce qu'il me liste aille dans une variable pour qu'ensemble je dise

Ca donnerait :
Code :
1
2
3
4
5
ls -t  *.tar | head -1 = variable1
si variable1 existe alors
get mon fichier
sinon
rien
j'ai essayé ceci mais ça ne fonctionne pas :
Code :
1
2
3
4
5
6
VAR=$(ls -t *.tar | head -1)
 if  [ $VAR ] ; then
      get mon fichier tar
      else
             rien
fi
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 12h20   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Essaie ça :

Code :
1
2
VAR=$(lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e 'ls -t  *.tar | head -1;quit')
echo ${VAR}
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 14h00   #10
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
Citation:
Envoyé par princesse95 Voir le message
J'ai trouvé l'erreur, j'avais un espace en trop entre -t et *
Du coup il me liste tout

Par contre, comment faire en sorte que ce qu'il me liste aille dans une variable pour qu'ensemble je dise

Ca donnerait :
Code :
1
2
3
4
5
ls -t  *.tar | head -1 = variable1
si variable1 existe alors
get mon fichier
sinon
rien
j'ai essayé ceci mais ça ne fonctionne pas :
Code :
1
2
3
4
5
6
VAR=$(ls -t *.tar | head -1)
 if  [ $VAR ] ; then
      get mon fichier tar
      else
             rien
fi
tu es obligé de le faire en 2 passes if n'est pas une commande légale dans ftp

les seules commandes FTP standard sont :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
!               debug           mdir            qc              send
$               dir             mget            sendport        site
account         disconnect      mkdir           put             size
append          exit            mls             pwd             status
ascii           form            mode            quit            struct
bell            get             modtime         quote           system
binary          glob            mput            recv            sunique
bye             hash            newer           reget           tenex
case            help            nmap            rstatus         tick
cd              idle            nlist           rhelp           trace
cdup            image           ntrans          rename          type
chmod           lcd             open            reset           user
close           ls              prompt          restart         umask
cr              macdef          passive         rmdir           verbose
delete          mdelete         proxy           runique         ?
regardes la méthode indiquée par zipe31, qui réalise la première passe, et valorise la variable
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h34   #11
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
La commande fonctionne bien. En revanche le if ne fonctionne pas. je ne savais pas que if n'était pas connu dans le mode ftp

Quel est le moyen possible permettant de tester avant de faire un get? Parce que dans la liste des possibilités, je ne vois pas laquelle est possible.

je ne vois pas comment tester sans un if
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 15h26   #12
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
suffit de faire plusieurs passes
au moins 1 pour récupérer les informations
et au moins 1 pour faire le get

Code :
1
2
3
4
5
6
7
8
9
10
11
12
.....................
VAR=$(lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e 'ls -t  *.tar | head -1;quit')
#traitements des variables
if ......... $VAR........
then
ftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP << EOT
get $FICHIER_TO_GET
bye
EOT
else 
.........................
fi
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h40   #13
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Tu peux me dire à quoi sert EOT?
EOF liste les fichiers je crois

Merci pour ton aide
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 16h02   #14
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Par contre, il me sort une erreur :
Code :
line 139: syntax error: unexpected end of file
Sauf que j'ai pas de ligne 139 mon script s'arrête avant. J'ai lu qu'il s'agit surement d'un oubli mais comment le trouver

C'est quand j'ai rajouté cette partie :
Code :
1
2
3
4
5
6
7
8
9
10
ARV=$(lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e 'ls -t  *.tar | head -1;quit')
echo ${ARV}
if [ -f $ARV ]; then
        lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP << EOT
        get $ARV $DESTINATION
        bye
        EOT
else
       echo "NE RIEN FAIRE"
fi
Je suis désolé mais c'est mon premier script
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 16h39   #15
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Pas d'indentation dans un

<<EOF
...
...
EOF

ou alors il faut rajouter un tiret "<<-EOF" :

Code :
1
2
3
4
5
6
7
8
9
10
ARV=$(lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e 'ls -t  *.tar | head -1;quit')
echo ${ARV}
if [ -f $ARV ]; then
        lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP <<-EOT
        get $ARV $DESTINATION
        bye
        EOT
else
       echo "NE RIEN FAIRE"
fi
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 16h45   #16
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Mon problème, c'est que j'ai toujours la même erreur et que je vois pas pourquoi.
Depuis que j'ai rajouté ces lignes de code, mon script veut plus fonctionner
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 16h52   #17
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Comme on est pas devin, sans voir ton script en entier difficile de t'aider
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 17h02   #18
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Oui c'est vrai. Alors pour isoler le problème j'ai passé tout le reste du script en commentaire. Le début fonctionne très bien puisqu'il me crée mes dossiers la connexion du ftp et le echo fonctionne

Mais dès que je rajoute ceci, j'ai l'erreur de la ligne 139

Code :
1
2
3
4
5
6
7
8
9
10
ARCH=$(lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e 'ls -t  *.tar | head -1;quit')
echo ${ARCH}
if [ -f $ARCH ]; then
        lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP <<EOT
        get $ARCH $DESTINATION/ARCH
        bye
        EOT
else
       echo "PAS DE FICHIER"
fi
En isolant juste la première commande et le echo ça fonctionne très bien. Mais après en rajoutant le test du if et le get bim plantage..
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 17h17   #19
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Et comme ça ?
Code :
1
2
3
4
5
6
7
ARCH=$(lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e 'ls -t  *.tar | head -1;quit')
echo ${ARCH}
if [ -f $ARCH ]; then
       lftp -u $FTP_LOGIN,$FTP_PASSWORD ftp://$FTP -e "get ${ARCH} ${DESTINATION}/ARCH;quit"
else
       echo "PAS DE FICHIER"
fi
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 17h38   #20
Membre du Club
 
Inscription : septembre 2008
Messages : 221
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 221
Points : 62
Points : 62
Cette fois il me dit :
ligne 59
ce qui correspond à la ligne du if
princesse95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h29.


 
 
 
 
Partenaires

Hébergement Web