Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/07/2011, à 01:57

eomer212

bash recuperer liste fichier et les traiter dans une boucle for

j'ai essayé de faire le script suivant pour recuperer la liste des fichiers commencant par "chargeur"
pour ensuite pouvoir les inserer dans mysql.
mais je n'arrive pas à memoriser la liste dans la variable databases. je bloque.
le script est comme ceci.

#!/bin/bash
databases=' find -name "chargeur*"'
for db in $databases; do
        echo trouvé $db
done

ca m'affiche directement la liste, mais ca ne traite pas les elements trouves dans la boucle for..

je bloque sur une stupidité sans doute.. merci de toute aide.

Hors ligne

#2 Le 17/07/2011, à 02:53

Watael

Re : bash recuperer liste fichier et les traiter dans une boucle for

salut,

l'usage d'une variable, ou d'un tableau n'est peut-être pas indispensable
avec bash >=4.0

shopt -s nullglob globstar
for file in ./**/chargeur*; do echo "trouvé $file"; done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 17/07/2011, à 03:10

eomer212

Re : bash recuperer liste fichier et les traiter dans une boucle for

oui, c'est ce dont je viens de me renbdre compte en parcourant un vieux sujet.
mais ca reste bizarre. pourqouoi je peux pas stocker la liste des reponses.?
avec ce type de fonctionnnement, ca donne.

#!/bin/bash

for db in ./*.sql
 do
        echo trouvé $db
         mysql -u root -ppassword < $db
done

comme ca ca me permet de remonter toutes les bases sauvegardées en une fois.
mais la question reste entiere sur le comment recuperer la liste des fichieres et la stocker dans une variable pour ensuite la parcourir, ou la filtrer ou en faire ce qu'on veut..

Hors ligne

#4 Le 17/07/2011, à 03:21

FRUiT

Re : bash recuperer liste fichier et les traiter dans une boucle for

eomer212 a écrit :

databases=' find -name "chargeur*"'

Parce que tu utilises des quotes ' au lieu d'utiliser des backquotes `

La substitution de commande utilise soit des backquotes soit la forme $( ).

resultat=`commande`
resultat=$(commande)

On préfère la 2ème forme $( ) plus récente, principalement pour (tu vas rire) la lisibilité ^^ mais aussi parce qu'elle s'imbrique plus facilement.


Cela dit ton essai est incorrect quand même car dès lors qu'un fichier contiendra un espace dans son nom, il sera considéré comme deux fichiers distincts. Seule la forme for db in ./*.sql de ton dernier message est correcte et gère les espaces.

Dernière modification par FRUiT (Le 17/07/2011, à 03:26)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#5 Le 17/07/2011, à 03:55

eomer212

Re : bash recuperer liste fichier et les traiter dans une boucle for

arf, merci pour l'explication..
oui, clair que cette notation devrait plus souvent etre utilisée, car entre les ' et les `on fait pas clairement la difference..
surtout aprés pas mal d'heures devant l'ecran...

Hors ligne

#6 Le 17/07/2011, à 07:17

Hizoka

Re : bash recuperer liste fichier et les traiter dans une boucle for

Pour repondre à ta question de base :

# envoie de la liste des fichier dans une variable database
database=$(find -name "chargeur*")

# modification de l'IFS pour qu'il passe en saut de ligne
old_IFS=${IFS} IFS=$'\n'

# boucle utilisant la variable database
for db in ${database}
do
   echo "${db}"
done

# remise en place de l'IFS
IFS=${old_IFS}

si ca passe pas avec la variable on peut passer par un fichier database...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne