IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Boucle sur répertoire ftp


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut Boucle sur répertoire ftp
    Bonjour,

    Voilà mon problème : j'ai des fichiers dans un serveur distant que je veux accéder par ftp sur lesquels je veux lancer un script perl à partir de mon serveur local.

    Je ne connais pas le nombre de fichier à traiter.
    Je ne connais pas les noms des fichiers.
    Je n'ai pas assez de place en local pour rapatrier tous les fichiers.

    Les solutions explorées étaient :
    - de récupérer les fichiers un à un, de lancer le perl et de le supprimer
    --> je n'ai jamais réussi à faire une boucle qui fonctionne, voici ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ftp -i -n -v << =END=
    open $hostname
    user $username $password
    cd $repertoire
    get $filename
    quit
    =END=
     
    perl monfichier.pl $filename
    A chaque fois que j'essaye de placer le for ça ne va pas...

    - de lancer le script perl directement sur le dossier distant et d'écrire le résultat en local
    --> Voilà ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ftp -i -n -v << =END=
    open $hostname
    user $username $password
    cd $repertoire
    !perl monfichier.pl $repertoire/*
    quit
    =END=
    Sans ! l'instruction perl n'est pas reconnue et avec c'est le répertoire qui n'existe plus (car il cherche en local)


    Est-ce que vous avez des solutions à me proposer ?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 351
    Par défaut
    Bonjour,

    Peux-tu nous montrer ton code avec la boucle for ?

    Sinon, en imbriquant le perl dans la partie ftp, tu es obligé de faire un get avant, car comme tu l'as compris, le perl est local.

  3. #3
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Pour la boucle for j'avais pensé à faire qqchose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ftp -i -n -v << =END=
    open $hostname
    user $username $password
    cd $repertoire
    for filename in $repertoire/*
    do
    get $filename
    perl monfichier.pl $filename
    !rm $filename
    done
    quit
    =END=
    Et j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    usage: for [ non-print | telnet | carriage-control ]
    ?Invalid command
    J'ai essayé avec ou sans !, mais n'ai pas trouvé le truc qui marche.
    Je pense que c'est sous mes yeux mais j'arrive plus à y voir clair.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 351
    Par défaut
    C'est un peu plus compliqué que ça, la procédure serait plutot celle-ci:

    On garde ta partie unitaire qui à priori fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ftp -i -n -v << =END=
    open $hostname
    user $username $password
    cd $repertoire
    get $filename
    quit
    =END=
     
    perl monfichier.pl $filename
    Maintenant, le but est de rajouter la boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for filename in $(<liste_de_fichiers.txt)
    do
    ftp -i -n -v << =END=
    open $hostname
    user $username $password
    cd $repertoire
    get $filename
    quit
    =END=
     
    perl monfichier.pl $filename
    #potentiel rm du fichier ou d'autres instruction lié au fichier
    done
    Et là, comme on peut le voir, il faut définir la liste_de_fichiers, pas le choix, il faut donc que tu fasses une première connection ftp pour récupérer cette liste.
    Donc un bout de code qui ressemblerait à peu près au bout de code que l'on a mis dans la boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ftp -i -n -v << =END=
    open $hostname
    user $username $password
    cd $repertoire
    ls . liste_de_fichier.txt
    quit
    =END=
    Remarque1: la ligne du ls pour rediriger le résultat dans un fichier est en principe la syntaxe qui est donné ici (ls . fichier) ne pas oublier le "." .
    Remarque2: Il faudra certainement retraiter un peu le fichier "liste_de_fichier.txt" avant de le fournir à la boucle for.

  5. #5
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Merci beaucoup pour ta réponse.

    J'ai utilisé une boucle while pour lire le fichier et il n'y a pas besoin de le retraiter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    while read filename
    do
     
    ftp -i -n -v << =end=
    open $hostname
    user $username $password
    cd $repertoire
    get $filename
    quit
    =end=
     
    echo "Traitement du fichier $filename" 
    perl monfichier.pl $filename
    rm ../fic/in/$filename
     
    done < ListeFichier.txt

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 351
    Par défaut
    Tu as bien fait pour la boucle while, car la boucle for n'est pas conseillée dans ce cas là, je suis d'ailleurs surpris que personne ne m'est tapé dessus

Discussions similaires

  1. boucle sur .doc d'un répertoire
    Par rijuju dans le forum VBA Word
    Réponses: 5
    Dernier message: 14/01/2009, 17h58
  2. Lister les fichiers d'un répertoire sur le FTP.
    Par tagada_tagada dans le forum Modules
    Réponses: 1
    Dernier message: 14/01/2009, 11h43
  3. boucle sur des noms de répertoires
    Par machmalabala dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/08/2007, 11h34
  4. boucle sur les répertoires
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 15/06/2007, 01h59
  5. [JSP/WebSphere] Boucle de controle sur un FTP
    Par benben13 dans le forum Websphere
    Réponses: 10
    Dernier message: 30/08/2005, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo