Programme linux

arame Messages postés 7 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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. arame Messages postés 7 Statut Membre
       
      merci ça marche c'est vraiment gentil

      bon weekend
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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