[bash] Liste des répértoires d'un dossier

Résolu
fabriceOb Messages postés 23 Statut Membre -  
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
bonjour

cherchant à lister les répertoires d'un dossier pour le réutiliser dans un traitement dans un script, j'ai un petit souci.
Voici le code

# je fais un LS du dossier que je stocke.
res= ls $logFold > $temp

cpt=0;	        # Compteur de ligne
listing="";     # liste des dossiers   | Séparateur: .

while read ligne  #je lis mon fichier
do 
    cpt=$(($cpt+1))
    if ( test -d "$logFold/$ligne" ) then
        listing= "$listing | $ligne";     # ceci est la ligne 36
    fi
done < $temp




Le souci: à l'exécution, j'obtiens:
./script_log.sh: line 36: | 200707 : commande introuvable

200707 > nom du répertoir. Et j'ai une ligne d'erreurs pour chaque repertoire de mon dossier.
Du coup, je me dis que soit je suis trop con pour trouver une erreur dans un code de 4 lignes où la fonction la plus compliquée est la concaténation.

Ou alors, que je me suis compliqué la vie pour avoir cette liste....
A voir également:

3 réponses

lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
au lieu de
listing= "$listing | $ligne"
mets
listing="$listing | $ligne"
pas d'espace avant et après =
1
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

exécute ton script avec l'option -vx pour voir

sh -vx tonscript

déjà je vois quelque chose que je n'aime pas

res= ls $logFold > $temp
ce n'est pas plutôt
ls $logFold > $temp
affiche ton script entier pas seulement une partie
ça nous aidera mieux comprendre
0
fabriceOb Messages postés 23 Statut Membre 3
 
Avant ca, j'ai un tas d'initialisation, etc..
(je connaissais pas le vx, merci :) )

fold=/home/fabrice/Desktop/_boulot/test # Dossier de travail local
+ fold=/home/fabrice/Desktop/_boulot/test

logFold=$fold/logs # Dossier de logs / mois
+ logFold=/home/fabrice/Desktop/_boulot/test/logs


ls $logFold > $temp
+ ls /home/fabrice/Desktop/_boulot/test/logs

cpt=0; # Compteur de ligne
+ cpt=0

listing=""; # liste des dossiers | Séparateur: .
+ listing=

while read ligne
do
    cpt=$(($cpt+1))
    if ( test -d "$logFold/$ligne" ) then
        listing= "$listing | $ligne";
    fi
done < $temp


+ read ligne
+ cpt=1
+ test -d /home/fabrice/Desktop/_boulot/test/logs/200707
+ listing=
+ ' | 200707'
script_log.sh: line 36: | 200707 : commande introuvable
+ read ligne
+ cpt=2
+ test -d /home/fabrice/Desktop/_boulot/test/logs/200708
+ listing=
+ ' | 200708'
script_log.sh: line 36: | 200708 : commande introuvable

+ read ligne
+ cpt=3
+ test -d /home/fabrice/Desktop/_boulot/test/logs/index.html
+ read ligne
+ cpt=4
[...]

+ read ligne

echo "$cpt lignes dans le fichier";
+ echo '7 lignes dans le fichier'

7 lignes dans le fichier




(note: le res, ca vient d'un test que j'avais fait plus tot.. et où j'ai mal nettoyé le code.
0