Programme linux

Bonjour

J'ai un petit souci avec un programme, l'utilisateur entre un chemin de répertoire et le programme lui affiche les sous répertoires et fichiers qui sont dedans. Le code :

read rep
echo "directory $rep"
liste=`ls $rep`
for i in $liste
do
a=`ls -l $i`
echo "$a"
done

le truc qui marche pas c'est le "ls -l $i"; le progamme ne reconnait pas le $i comme un fichier ou répertoire; pourtant le code me semble correct.

si vous avez une idée de ce qui cloche!

Merci bonne journée

2 réponses

  1. Modérateur
    Salut arame,

    C'est normal que tu n'arrive pas.

    Tu lis d'abord le répertoire (read rep)
    /home/user (par exemple)
    quand tu fait ls /home/user il t'affiche les nom des repertoires (mais pas l'arborescence complète)
    et quand tu essaies de faire un ls sur un sous répertoire (ls -l $i) en fait tu ne trouve pas le sous-répertoire (il te manque le répertoire père)

    Ex :
    $ pwd # on vérifie le répertoire courant
    $ /home/user
    $ ls
    user1 user2 # dans user1 on a le répertoire Documents
    $ ls Documents # on essaie de lister Documents
    ls: Documents: Aucun fichier ou répertoire de ce type # message d'erreur
    $ ls /home/user1/Documents
    rep1 rep2 fichier1

    Donc pour que ton code fonctionne j'ai fait quelques modifications

    #! /bin/sh
    
    read rep
    echo "directory $rep"
    liste=`ls $rep`
    for i in $liste
    do
    a=`ls -aRl $rep/$i`  # R opttion recursive, a pour all, $rep je m'assure que j'ai l'arborescence complète des sous-répertoires
    echo "$a"
    done
    0
    1. merci ça marche c'est vraiment gentil

      bon weekend
      0
  2. Modérateur
    Salut,

    Tiens une variante avec la commande "tree" (man tree pour les différents paramètres) :
    #! /bin/sh
    
    echo "Entrez le nom d'un répertoire précédé de son chemin absolu."
    echo "(Exemple : /home/user/images)"
    read rep
    echo
    echo "Le répertoire $rep contient les fichiers et sous-répertoires suivants :"
    echo "(Utilisez les flêches \"hauts et bas\" pour vous déplacez."
    echo "Tapez \"q\" pour quitter.)"
    sleep 4 # on fait une pause de 4 secondes pour afficher le message
    tree -pfF $rep | less # on contrôle l'affichage avec "less" (man less)
    exit
    
    ;-))
    0