#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
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