Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1169 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  obtenir les fichiers d'un répertoire en shell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

obtenir les fichiers d'un répertoire en shell

n°1491483
dams78
développateur
Posté le 14-12-2006 à 17:52:30  profilanswer
 

bonjour,
je possède ce code :

Code :
  1. cpt=0
  2. for i in `find $repertoire -type f`
  3. do
  4.   echo $i
  5.   files[$cpt]=`echo $i`
  6.   cpt=$(($cpt+1))
  7. done


qui est sensé récupéré tous les fichier d'un répertoire dans un tableau et par la même occasion les affichiers (les fichiers)
seulement j'ai remarqué que si le fichier contient des espaces, ceux ci sont considéré comme de retours chariot...
 
comment je peux faire pour éviter cela?
 
merci


---------------
dam's (debianer), ma galerie Flickr
mood
Publicité
Posté le 14-12-2006 à 17:52:30  profilanswer
 

n°1491867
couak
Posté le 15-12-2006 à 14:59:02  profilanswer
 

utilise la fonction read

n°1491885
minusplus
Posté le 15-12-2006 à 15:23:31  profilanswer
 

ligne 5:


files[$cpt]="$i"

n°1491969
dams78
développateur
Posté le 15-12-2006 à 16:45:16  profilanswer
 

files[$cpt]="$i"  ne change rien :'(
la fonction read s'utilise à la place de mon find?

n°1492377
dams78
développateur
Posté le 17-12-2006 à 15:45:30  profilanswer
 

la fonction read permet de récupéré des informations tapées au clavier
je vois pas trop comment l'utiliser dans mon cas
 
merci de votre aide

n°1492406
couak
Posté le 17-12-2006 à 17:44:35  profilanswer
 

Code :
  1. find $repertoire -type f | while read LINE
  2. do
  3. echo "ligne lue = $LINE"
  4. done


Message édité par couak le 17-12-2006 à 17:45:36
n°1492489
dams78
développateur
Posté le 17-12-2006 à 23:24:06  profilanswer
 

cette solution à l'aire de marcher, je vais la tester un peu plus
merci en tout cas!

n°1492933
dams78
développateur
Posté le 18-12-2006 à 19:18:49  profilanswer
 

bonsoir,
alors voila le script "amélioré"

Code :
  1. find $rep -type f | while read LINE
  2. do
  3.   wall[$cpt]=`echo $LINE`
  4.   cpt=$(($cpt+1))
  5. done
  6. echo $cpt


 
seulement l'affichage de mon cpt renvoi 0 , alors que si je fais un   echo cpt=$(($cpt+1)) à chaque appel du while je vois bien le cpt s'incrémenté...
 
merci de votre aide (je suis débutant en shell, donc c'est peut etre sur la forme que je butte...)

n°1493054
chicotruss
Posté le 18-12-2006 à 23:55:30  profilanswer
 

Citation :

seulement l'affichage de mon cpt renvoi 0 , alors que si je fais un   echo cpt=$(($cpt+1)) à chaque appel du while je vois bien le cpt s'incrémenté...


 
pour que le shell effectue un calcul numerique je crois qu'il faut un 'let' devant
 

Code :
  1. let cpt=$cpt+1

n°1493081
couak
Posté le 19-12-2006 à 07:56:32  profilanswer
 

j'ai une question bête : pourquoi tu t'embêtes à mettre dans une variable tableau ? c'est vrai le shell c'est plutôt pour faire des trucs rapides, avec des commandes encapsulées

mood
Publicité
Posté le 19-12-2006 à 07:56:32  profilanswer
 

n°1493716
Sve@r
Posté le 19-12-2006 à 18:54:49  profilanswer
 

dams78 a écrit :

la fonction read permet de récupéré des informations tapées au clavier  
je vois pas trop comment l'utiliser dans mon cas


En fait, le programme "read" (et non la fonction) récupère toute info dans l'entrée standard. Mais rien ne t'empêche de rediriger cette entrée à partir d'autre chose
Ex:

read a </etc/passwd
echo $a    # => tu obtiens tout le contenu de "/etc/passwd"


 
Donc dans la syntaxe "flux quelconque |while read LINE do; ... done", le shell commence par mettre le flux entier dans le pipe, puis le while entre en jeu et lance le read qui lit l'entrée standard (le pipe). Il s'arrête au premier "return" (première ligne) et charge cette ligne dans la variable "LINE" que tu traiteras dans la boucle pendant que le pipe est vidé de ce qui a été lu. Puis ça recommence et tu lis la seconde ligne etc jusqu'à la fin. A la fin, le pipe étant vide, le "read" renvoie "faux" et le "while" s'arrête.
Ce principe est courament utilisé pour traiter n'importe quel flux entrant ligne par ligne...
 

dams78 a écrit :

bonsoir,
alors voila le script "amélioré"

Code :
  1. find $rep -type f | while read LINE
  2. do
  3.   wall[$cpt]=`echo $LINE`
  4.   cpt=$(($cpt+1))
  5. done
  6. echo $cpt


 
seulement l'affichage de mon cpt renvoi 0 , alors que si je fais un   echo cpt=$(($cpt+1)) à chaque appel du while je vois bien le cpt s'incrémenté...
 
donc c'est peut etre sur la forme que je butte...)


 
Tu ne buttes absolument pas sur la forme. Ton shell est parfaitement écrit. Le pb, c'est que ton pipe (| while read ...) te génère un sous processus qui disparait en fin de done. Ton sous-processus disparait ainsi que toutes ses variables modifiées.
Pour t'en sortir, il faut grouper le while et le echo avec des parenthèses (qui servent à grouper différentes commandes dans un même processus)

Code :
  1. find $rep -type f | ( while read LINE
  2. do
  3.   wall[$cpt]=`echo $LINE`
  4.   cpt=$(($cpt+1))
  5. done
  6. # Ici, on est toujours dans le même processus grâce aux parenthèses
  7. echo $cpt)
  8. # Ici, on a quitté le sous-processus - cpt vaut la valeur du départ
  9. echo $cpt


 

dams78 a écrit :

merci de votre aide (je suis débutant en shell)


Tuto de shell en français ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf
 

dams78 a écrit :

Code :
  1. wall[$cpt]=`echo $LINE`



 
Petit détail:  

machin=`echo truc`


Se remplace avantageusement par

machin=truc


Message édité par Sve@r le 19-12-2006 à 19:59:44

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1494543
dams78
développateur
Posté le 20-12-2006 à 21:06:38  profilanswer
 

nikel ca marche
merci de votre aide!!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  obtenir les fichiers d'un répertoire en shell

 

Sujets relatifs
[Résolu] [MySQL] Contenu du répertoire dataInsertion plusieurs fichiers flv.
Regle dans le Makefile pour effacer un repertoire apres CTRL+C ?[VB]Empécher de changer le répertoire dans une CommonDialog
besoin urgent d'un tuteur (ou parrain) en shell!!Socket en script shell
[PHP : facile je pense] Fichiers en php et incrementation de variablesPb de ciblage de fichiers
contenu d'un répertoireobtenir un identifiant unique pour le poste
Plus de sujets relatifs à : obtenir les fichiers d'un répertoire en shell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR