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 10/08/2011, 22h55   #1
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 23h38   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/08/2011, 01h56   #3
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
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 :
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...
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 08h38   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 535
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 535
Points : 7 748
Points : 7 748
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
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h41   #5
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 :
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
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 15h01   #6
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
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?
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 15h08   #7
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 15h12   #8
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
il y a une erreur là (redirection de la commande find):
Code :
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.
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 15h17   #9
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 !
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 15h23   #10
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Une petite substitution devrais faire l'affaire:

Code :
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 :
mv ${REPLY%.*}.tiff /LeNouveaux/DossierDe/Destination
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 15h34   #11
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 15h38   #12
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Code non-testé :
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/08/2011, 15h40   #13
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
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 :
1
2
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/sfw/lib:~/jmap/bin
export LD_LIBRARY_PATH
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 16h14   #14
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 :
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 !!!
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 16h28   #15
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 535
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 535
Points : 7 748
Points : 7 748
faut pas bosser avant 16H30 du mat" on vous l'a pas déjà dit !?
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 16h44   #16
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
Ahahah ! Je vis au Québec donc il est bien 10h30
Geoffrey49000 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 09h03.


 
 
 
 
Partenaires

Hébergement Web