Bonjour a tous,

je lance ce fil car j'ai quelques petits soucis dans un de mes scripts.
J'explique :
ce script est prevu pour explorer un repertoire, ainsi que les suivants ( et affiche les fichiers/dossiers présents dans le repertoire du moment).
Simple comme script.
Sauf que voila ce qui arrive :
-a chaque fois que je rentre dans un dossier pour l'explorer, un fichier "EXIT" est crée dans le repertoire d'ou je proviens ?????
-je trouve le script pas tres partique a lire et modifier, y a surement des choses a ameliorer.......
-j'ai programmé une possibilité de sortie de l'exploration d'un repertoire, pour retomber dans celui ou est le repertoire dont je sort, mais sans succes......
je sais qu'il y a encore beaucoup de choses a ameliorer, mais la je bloque.
je n'arrive pas a regler ces differents points...............

Voici le script :
#!/bin/bash
#clear

################## Variable du repertoire scruté ##################
erreur=$PWD\/erreur #repertoire ou j'ecrit les erreurs du script
donnees=/ #repertoire ou debute l'exploration

################## DEPART SCRIPT ##################
intro ()
{ #10
echo "-----------------------------------------------------"
echo " Sélectionner le Répertoire a Explorer "
#echo " en Tapant le N° de ligne "
echo " OU Sorter du Répertoire avec EXIT "
echo "-----------------------------------------------------"
}

scrut ()
{
i=0 #init boucle while #20
while [ $i -lt $limite ]
do
echo ${TABLEAU[$i]} ;#affiche le contenu incrémenté du tableau
i=$[$i+1]
done
}

scrut1 ()
{
i=0 #init boucle while #30
while [ $i -lt $limite ]
do
echo ${TABLEAU1[$i]} ;#affiche le contenu incrémenté du tableau
i=$[$i+1]
done
}

scrut2 ()
{
i=0 #init boucle while #40
while [ $i -lt $limite ]
do
echo ${TABLEAU2[$i]} ;#affiche le contenu incrémenté du tableau
i=$[$i+1]
done
}

scrut3 ()
{
i=0 #init boucle while #50
while [ $i -lt $limite ]
do
echo ${TABLEAU3[$i]} ;#affiche le contenu incrémenté du tableau
i=$[$i+1]
done
}

scrut4 ()
{
i=0 #init boucle while #60
while [ $i -lt $limite ]
do
echo ${TABLEAU4[$i]} ;#affiche le contenu incrémenté du tableau
i=$[$i+1]
done
}

scrut5 ()
{
i=0 #init boucle while #70
while [ $i -lt $limite ]
do
echo ${TABLEAU5[$i]} ;#affiche le contenu incrémenté du tableau
i=$[$i+1]
done
}

until [ $nrep = "EXIT" ] 2> $erreur
do
TABLEAU=( $(dir $donnees) ) #Stocke les repertoires disponibles du repertoire scruté #80
limite=${#TABLEAU[@]} #limite de boucle
intro
scrut
echo
read nrep
if [ $nrep <> "EXIT" ] 2> $erreur
then cd $donnees$nrep\/ 2> $erreur
fi;
until [ $nrep1 = "EXIT" ] 2> $erreur
do #90
TABLEAU1=( $(dir $donnees$nrep\/) ) #Stocke les repertoires disponibles du repertoire scruté
limite=${#TABLEAU1[@]} #limite de boucle
intro
scrut1
echo
read nrep1
if [ $nrep1 <> "EXIT" ] 2> $erreur
then cd $donnees$nrep\/$nrep1\/ 2> $erreur
fi;
until [ $nrep2 = "EXIT" ] 2> $erreur #100
do
TABLEAU2=( $(dir $donnees$nrep\/$nrep1\/) ) #Stocke les repertoires disponibles du repertoire scruté
limite=${#TABLEAU2[@]} #limite de boucle
intro
scrut2
echo
read nrep2
if [ $nrep2 <> "EXIT" ] 2> $erreur
then cd $donnees$nrep\/$nrep1\/$nrep2\/ 2> $erreur
fi; #110
until [ $nrep3 = "EXIT" ] 2> $erreur
do
TABLEAU3=( $(dir $donnees$nrep\/$nrep1\/$nrep2\/) ) #Stocke les repertoires disponibles du repertoire scruté
limite=${#TABLEAU3[@]} #limite de boucle
intro
scrut3
echo
read nrep3
if [ $nrep3 <> "EXIT" ] 2> $erreur
then cd $donnees$nrep\/$nrep1\/$nrep2\/$nrep3\/ 2> $erreur #120
fi;
until [ $nrep4 = "EXIT" ] 2> $erreur
do
TABLEAU4=( $(dir $donnees$nrep\/$nrep1\/$nrep2\/$nrep3\/) ) #Stocke les repertoires disponibles du repertoire scruté
limite=${#TABLEAU4[@]} #limite de boucle
intro
scrut4
echo
read nrep4
if [ $nrep4 <> "EXIT" ] 2> $erreur #130
then cd $donnees$nrep\/$nrep1\/$nrep2\/$nrep3\/$nrep4\/ 2> $erreur
fi;
until [ $nrep5 = "EXIT" ] 2> $erreur
do
TABLEAU5=( $(dir $donnees$nrep\/$nrep1\/$nrep2\/$nrep3\/$nrep4\/) ) #Stocke les repertoires disponibles du repertoire scruté
limite=${#TABLEAU5[@]} #limite de boucle
intro
scrut5
echo
read nrep5 #140
if [ $nrep5 <> "EXIT" ] 2> $erreur
then cd $donnees$nrep\/$nrep1\/$nrep2\/$nrep3\/$nrep4\/$nrep5\/
fi;
# cd ..
done
# cd ..
done
# cd ..
done
# cd .. #150
done
# cd ..
done
#cd ..
done
si vous avez des idées ou des propositions, je les prends toutes et volontiers...............

A savoir que les # devants les "cd .." sont juste la pour voir ou je deconnes...........

Merci d'avance a ceux qui prendront un peu de temps

[MODO]Modification du titre
http://www.linternaute.com/dictionnaire/fr/definition/titre/ wrote:titre, nom masculin
Sens 1 Intitulé, inscription placée en tête d'un livre, d'un article, d'un texte et qui indique son contenu.
@ celmir :
tree -R ?????????????????????????????????????????? c'est quoi
@celmir :
ok pour tree, mais c'est pas ce que je veux, merci quand meme.............
Je me souviens qu'on avait eu un script à faire en L2 qui faisait ça, c'était beaucoup plus simple.

Je te remet ce dont je me souviens de l'algo

for $i in ls
tester si $i est un dossier
si oui on affiche le nom et on relance le script avec le nom du dosier en parametre (utilisation de $0)
si non on affiche le nom
fin de la boucle

on testait le nombre de paramètre, si y en avait pas on lancait avec le répertoire courant, sinon on prenait le répertoire en paramètre, etc.....

C'est juste un vague souvenir, mais j'espère que ça t'aide.

on rajoutait même une chaine de caractère quand on relançait le script pour un appel récursif, pour visualiser la hierarchie ("--" ou un truc équivalent).
  • [supprimé]

  • Modifié
Et avec find ?
find . -type d
Sino en csh, voici un debut de code, suffit d'en faire un fonction avec appel recursif :
#!/bin/csh
foreach REP (`ls`)
if(-d $REP) then
echo $REP
endif
end
@melianos :
ok merci pour l'idée du "for", je l'oublie tout le temps, d'ailleurs la lecture dans les repertoires tourne nickel.

@[supprimé] : merci pour la proposition (qui ressemble a celle de melianos), mais j'ai commencé mon script en bash et j'ai pas trop envie de changer de language (je débute et c'est deja pas trop evident).
la tout de suite, j'ai un nouveau souci.
j'explique :
le script tourne bien (comme je veux en entrée et sortie de repertoire etc, etc) et ce grace a une boucle while, mais le souci, c'est que je n'arrive pas a en sortir proprement (soit sans erreur, soit sans boucle infinie).

d'ailleurs voici le script :
#!/bin/bash
#clear

#rep=/
rep1=/

scrut ()
{
for i in `ls`
do #10
if [ -d $i ]
then echo $i
else echo $i
fi;
done
}

while [ $rep1 != "sortie" ]
do
cd $rep1 #20
scrut
read rep2
echo $rep2
read
if [ -z $rep2 ]
then echo vide
rep2=`pwd`
echo $rep2
read
rep1=${rep2%/*}
echo $rep1
read
# fi;
else
if [ -d $rep2 ]
then echo dossier
rep1=$rep1$rep2\/
echo $rep1
read
rep2=
fi;
fi;
done
si vous voyez ou je deconne, ca m'arrangerai bien, merci d'avance.....
for i in `ls`
1. ne pas utiliser `foo` mais $(foo) a la place. (C'est la recommandation POSIX).
2. aucun interet de faire un ls
3. marchera pas de toute facon - cas des espaces et autres noms de fichiers avec caracteres speciaux.
for i in *
c'est tout.
pti-seb :
#!/bin/csh
foreach REP (`ls`)
    if(-d $REP) then
        echo $REP
    endif
end
Suffit de faire foreach REP (*/) ; echo $REP ; end non ? -_-