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

Résolu
fabriceOb Messages postés 23 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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....

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    au lieu de
    listing= "$listing | $ligne"
    mets
    listing="$listing | $ligne"
    pas d'espace avant et après =
    1
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. 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