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 GNU Discussion :

Copier les résultats d'un find dans des variables


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Copier les résultats d'un find dans des variables
    Bonjour,

    Comme le sujet le dit, je souhaiterais récupérer les différents paths que me renvoie ma commande find. Je pensais a faire une boucle qui lirait le résultat n de ma requete mais étant vraiment débutant dans ce langage j'avoue que je planche un peu...

    Awk me permettrait il de faire cela si je le combine a mon find ?

    Merci pour vos réponses

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Bonjour,

    find a une option -printf, qui doit te permettre d'avancer
    ...
    ?

    montre ce que tu fais, ce que tu obtiens, et le résultat souhaité.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Find te donne en général un résultat sous la forme :
    premier résultat
    second résultat
    troisieme résultat
    ...
    Donc en théorie tu auras un traitement du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read
    do
        echo $REPLY
    done < <(LaCommandeFind)
    les lignes de résultat seront lus une à une à chaque boucle. Maintenant comme N_BaH l'a dit précédemment, ils nous faut en savoir plus pour t'aider...
    Carpe Diem

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    suffit de charger dans la boucle une variable resultat de forme TABLEAU et ainsi chaque ligne est une occurrence du tableau et tu peux ainsi traiter comme tu veux et dans l'ordre que tu veux ....

    si tu veux un traitement identique pour tout, mieux vaut faire le traitement directement à chaque itération dans la boucle comme proposé par levi59


    si tu veux juste agir sur les fichiers trouvés, alors il vaut mieux utiliser l'option exec de find

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Merci pour vos réactions !

    J'aurais besoin de transformer les fichiers recherchés (.grd) en .tiff. Voila pourquoi il faut que je récupere séparement ces résultats

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    export LD_LIBRARY_PATH=/usr/sfw/lib:~/jmap/bin
    export GDAL_DATA=~/geodata/gdal
     
    while read
    do
        echo gdal_translate -ot Byte -b 1 -b 2 -b 3 $REPLY /export/home/gis/geodata/gdal/
    done find . -name GSM*grd

  6. #6
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Quels sont tes critères pour déplacer les fichiers?
    Tu souhaites déplacer tous les fichiers vers un dossier précis fixé dans le script ou bien choisir manuellement un fichier et ensuite un dossier de destination?
    Carpe Diem

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Il faut que le fichier ait l'extension ".grd" . Si c'est le cas j’exécute la commande gdal_translate qui me renvoie un fichier ".tiff"

    Tout cela doit être automatique, tous les fichiers ".grd" doivent être traités de la même manière

  8. #8
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    il y a une erreur là (redirection de la commande find):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    export LD_LIBRARY_PATH=/usr/sfw/lib:~/jmap/bin
    export GDAL_DATA=~/geodata/gdal
     
    while read
    do
        echo gdal_translate -ot Byte -b 1 -b 2 -b 3 $REPLY /export/home/gis/geodata/gdal/
    done < <(find . -name GSM*grd)
    Je ne sais pas comment fonctionne ta commande gdal_translate mais pour etre sûr, le echo c'était juste un exemple. tu n'en a pas besoin ici.
    Carpe Diem

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Arf... oui une étourderie de ma part... j'ai oublié de l'enlever...

    Merci pour ton aide car je débute vraiment en shell :s

    Pour la destination du .tiff j'ai mis le répertoire mais comment puis je faire pour que son nom soit le meme que celui du .grd, c'est a dire par exemple le fichier :

    GSM_Current_ATLANTIC_UTM21_201106.grd =» GSM_Current_ATLANTIC_UTM21_201106.tiff

    Merci beaucoup pour l'aide !

  10. #10
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Une petite substitution devrais faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    export LD_LIBRARY_PATH=/usr/sfw/lib:~/jmap/bin
    export GDAL_DATA=~/geodata/gdal
     
    while read
    do
             gdal_translate -ot Byte -b 1 -b 2 -b 3 ${REPLY} ${REPLY%.*}.tiff
    done < <(find . -name GSM*grd)
    Si tu veux ensuite déplacer le tiff créé, tu peux ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mv ${REPLY%.*}.tiff /LeNouveaux/DossierDe/Destination
    Carpe Diem

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Merci !

    J'ai juste une petite erreur:

    ./gdal.sh: LD_LIBRARY_PATH=/usr/sfw/lib:~/jmap/bin: is not an identifier

    je cherche la solution et je te dis si ça marche

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Code non-testé : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name GSM*grd -exec sh -c 'gdal_translate -ot Byte -b 1 -b 2 -b 3 "$1" "/chemin/destination/$(basename "$1" .grd).tiff"' _ {} \;
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par Geoffrey49000 Voir le message
    Merci !

    J'ai juste une petite erreur:

    ./gdal.sh: LD_LIBRARY_PATH=/usr/sfw/lib:~/jmap/bin: is not an identifier

    je cherche la solution et je te dis si ça marche
    essaye de remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/sfw/lib:~/jmap/bin
    export LD_LIBRARY_PATH
    Carpe Diem

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Exacte ça marche, il y avait aussi une autre solution qui était de mettre en début de shell : #!/bin/bash au lieu de #!/bin/sh

    Il me reste une erreur et ça devrait etre bon avec le "move" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash-3.00$ mv: cannot access .tiff

    EDIT: Non c'est bon j'ai juste pas réfléchis... pas mis a la bonne place ! Faut que je me réveille un peu la ^^ (il est que 10h du matin ici) TOUT marche merci infiniment pour votre patiente !!!

  15. #15
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    faut pas bosser avant 16H30 du mat" on vous l'a pas déjà dit !?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Ahahah ! Je vis au Québec donc il est bien 10h30

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Copier les résultats d'une recherche dans un autre classeur 2
    Par sossso112333 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/05/2015, 20h52
  2. Récupérer les résultats d'une requête dans des variables
    Par christophebolmontcha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/05/2014, 10h14
  3. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  4. [MySQL] Comment stocker les résultats d'un enregistrement dans des variables?
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 30/07/2010, 21h23
  5. [ODBC] enregistrement des résultat d'une requete dans des variables
    Par maraly dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/02/2007, 14h24

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