Bonjour à tous !

J'ai un soucis avec une fonction récursive que j'ai créée. Cette fonction accepte en entrée un répertoire et sort un fichier contenant récursivement tous les fichiers/dossiers triés selon le classement suivant : dossier/fichiers

Voici un exemple de résultat que j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
1 Journal édité : mer mai 21 20:09:24 CEST 2008
2 Rep de base : /usr/project/sysA
3
4 Chemin: /usr/project/sysA
5 drwxr-xr-x 4 root root 4096 2008-05-21 16:06 bin
6 drwxr-xr-x 4 root root 4096 2008-05-21 20:07 chien
7 drwxr-xr-x 3 root root 4096 2008-05-21 20:08 test_dir1
8 drwxr-xr-x 2 root root 4096 2008-05-05 14:41 test_dir2
9 -rw-r--r-- 1 root root 225 2008-05-05 15:46 journal_tmp
10 FIN D EXPLORATION POUR: /usr/project/sysA
11
12 Chemin: /usr/project/sysA/bin
13 drwxr-xr-x 2 root root 4096 2008-05-05 13:28 test
14 drwxr-xr-x 2 root root 4096 2008-05-21 16:07 test_err
15 -rw-r--r-- 1 root root 0 2008-05-05 13:33 aaaa
16 -rwxr-xr-x 1 root root 3072 2008-05-03 14:39 arch
17 -rwxr-xr-x 1 root root 13972 2008-05-03 14:39 basename
18 -rwxr-xr-x 1 root root 755276 2008-05-03 14:39 bash
19 -rwxr-xr-x 1 root root 18128 2008-05-03 14:39 cat
20 -rwxr-xr-x 1 root root 44984 2008-05-03 14:39 chgrp
21 -rwxr-xr-x 1 root root 37164 2008-05-03 14:39 chmod
22 -rwxr-xr-x 1 root root 46944 2008-05-03 14:39 chown
23 -rwxr-xr-x 1 root root 61280 2008-05-03 14:39 cp
24 -rwxr-xr-x 1 root root 121804 2008-05-03 14:39 cpio
25 -rwxr-xr-x 1 root root 27788 2008-05-03 14:39 cut
26 -rwxr-xr-x 1 root root 53328 2008-05-03 14:39 date
27 -rwxr-xr-x 1 root root 40628 2008-05-03 14:39 dd
28 -rwxr-xr-x 1 root root 38740 2008-05-03 14:39 df
29 -rwxr-xr-x 1 root root 4668 2008-05-03 14:39 dmesg
30 -rwxr-xr-x 1 root root 2800 2008-05-03 14:39 doexec
31 -rwxr-xr-x 1 root root 14748 2008-05-03 14:39 echo
32 -rwxr-xr-x 1 root root 33 2008-05-03 14:39 egrep
33 -rwxr-xr-x 1 root root 13980 2008-05-03 14:39 env
34 -rwxr-xr-x 1 root root 25160 2008-05-03 14:39 expr
35 -rwxr-xr-x 1 root root 12164 2008-05-03 14:39 false
36 -rwxr-xr-x 1 root root 1065940 2008-05-03 14:39 fbmngplay.static
37 -rwxr-xr-x 1 root root 4044 2008-05-03 14:39 fbresolution
38 -rwxr-xr-x 1 root root 997140 2008-05-03 14:39 fbtruetype.static
39 -rwxr-xr-x 1 root root 33 2008-05-03 14:39 fgrep
40 -rwxr-xr-x 1 root root 146256 2008-05-03 14:39 find
41 -rwxr-xr-x 1 root root 7400 2008-05-03 14:39 flock
42 -rwxr-xr-x 1 root root 316156 2008-05-03 14:39 gawk
43 -rwxr-xr-x 1 root root 316156 2008-05-03 14:39 gawk-3.1.5
44 -rwxr-xr-x 1 root root 18172 2008-05-03 14:39 gettext
45 -rwxr-xr-x 1 root root 76512 2008-05-03 14:39 grep
46 -rwxr-xr-x 1 root root 65 2008-05-03 14:39 gunzip
47 -rwxr-xr-x 1 root root 56748 2008-05-03 14:39 gzip
48 -rwxr-xr-x 1 root root 9888 2008-05-03 14:39 hostname
49 -rwxr-xr-x 1 root root 16220 2008-05-03 14:39 id
50 -rwxr-xr-x 1 root root 3089 2008-05-03 14:39 igawk
51 -rwxr-xr-x 1 root root 31736 2008-05-03 14:39 ipcalc
52 -rwxr-xr-x 1 root root 9344 2008-05-03 14:39 kill
53 -rwxr-xr-x 1 root root 13012 2008-05-03 14:39 link
54 -rwxr-xr-x 1 root root 24408 2008-05-03 14:39 ln
55 -rwxr-xr-x 1 root root 78468 2008-05-03 14:39 loadkeys
56 -rwxr-xr-x 1 root root 8228 2008-05-03 14:39 logger
57 -rwxr-xr-x 1 root root 20872 2008-05-03 14:39 login
58 -rwxr-xr-x 1 root root 89164 2008-05-03 14:39 ls
59 -rwxr-xr-x 1 root root 343100 2008-05-03 14:39 mail
60 -rwxr-xr-x 1 root root 20332 2008-05-03 14:39 mkdir
61 -rwxr-xr-x 1 root root 18884 2008-05-03 14:39 mknod
62 -rwxr-xr-x 1 root root 7688 2008-05-03 14:39 mktemp
63 -rwxr-xr-x 1 root root 30576 2008-05-03 14:39 more
64 -rwxr-xr-x 1 root root 89936 2008-05-03 14:39 mount
65 -rwxr-xr-x 1 root root 4880 2008-05-03 14:39 mountpoint
66 -rwxr-xr-x 1 root root 68848 2008-05-03 14:39 mv
67 -rwxr-xr-x 1 root root 105388 2008-05-03 14:39 netstat
68 -rwxr-xr-x 1 root root 15688 2008-05-03 14:39 nice
69 -rwxr-xr-x 1 root root 7400 2008-05-03 14:39 open
70 -rwxr-xr-x 1 root root 32520 2008-05-03 14:39 ping
71 -rwxr-xr-x 1 root root 12668 2008-05-03 14:39 procps3-kill
72 -rwxr-xr-x 1 root root 9924 2008-05-03 14:39 progress
73 -rwxr-xr-x 1 root root 71864 2008-05-03 14:39 ps
74 -rwxr-xr-x 1 root root 18124 2008-05-03 14:39 pwd
75 -rwxr-xr-x 1 root root 6144 2008-05-03 14:39 raw
76 -rwxr-xr-x 1 root root 346 2008-05-03 14:39 reset_sound
77 -rwxr-xr-x 1 root root 38660 2008-05-03 14:39 rm
78 -rwxr-xr-x 1 root root 13972 2008-05-03 14:39 rmdir
79 -rwxr-xr-x 1 root root 85332 2008-05-03 14:39 rpm
80 -rwxr-xr-x 1 root root 101888 2008-05-03 14:39 sed
81 -rwxr-xr-x 1 root root 30448 2008-05-03 14:39 setfont
82 -rwxr-xr-x 1 root root 44956 2008-05-03 14:39 sfxload
83 -rwxr-xr-x 1 root root 14276 2008-05-03 14:39 sleep
84 -rwxr-xr-x 1 root root 71792 2008-05-03 14:39 sort
85 -rwxr-xr-x 1 root root 37520 2008-05-03 14:39 stat
86 -rwxr-xr-x 1 root root 37516 2008-05-03 14:39 stty
87 -rwxr-xr-x 1 root root 20824 2008-05-03 14:39 su
88 -rwxr-xr-x 1 root root 12436 2008-05-03 14:39 sync
89 -rwxr-xr-x 1 root root 315924 2008-05-03 14:39 tar
90 -rwxr-xr-x 1 root root 9864 2008-05-03 14:39 taskset
91 -rwxr-xr-x 1 root root 339588 2008-05-03 14:39 tcsh
92 -rwxr-xr-x 1 root root 38640 2008-05-03 14:39 touch
93 -rwxr-xr-x 1 root root 12164 2008-05-03 14:39 true
94 -rwxr-xr-x 1 root root 72020 2008-05-03 14:39 umount
95 -rwxr-xr-x 1 root root 15344 2008-05-03 14:39 uname
96 -rwxr-xr-x 1 root root 1424 2008-05-03 14:39 unicode_start
97 -rwxr-xr-x 1 root root 57 2008-05-03 14:39 unicode_stop
98 -rwxr-xr-x 1 root root 12792 2008-05-03 14:39 unlink
99 -rwxr-xr-x 1 root root 27128 2008-05-03 14:39 usleep
100 -rwxr-xr-x 1 root root 518248 2008-05-03 14:39 vim-minimal
101 -rwxr-xr-x 1 root root 66 2008-05-03 14:39 zcat
102 FIN D EXPLORATION POUR: /usr/project/sysA/bin
103
104 Chemin: /usr/project/sysA/bin/test
105 -rw-r--r-- 1 root root 0 2008-05-05 13:28 tarma
106 -rw-r--r-- 1 root root 0 2008-05-05 13:28 unlink
107 -rw-r--r-- 1 root root 0 2008-05-05 13:28 zarma
108 FIN D EXPLORATION POUR: /usr/project/sysA/bin/test
109
110 Chemin: /usr/project/sysA/bin/test_err
111 -rw-r--r-- 1 root root 0 2008-05-21 16:07 pocpocpoc
112 -rw-r--r-- 1 root root 0 2008-05-21 16:07 quiestla
113 FIN D EXPLORATION POUR: /usr/project/sysA/bin/test_err
114
104 Chemin: /usr/project/sysA/chien
105 drwxr-xr-x 2 root root 4096 2008-05-21 20:07 dogue
106 drwxr-xr-x 2 root root 4096 2008-05-21 20:07 labrador
107 -rw-r--r-- 1 root root 0 2008-05-21 16:08 waf
108 -rw-r--r-- 1 root root 0 2008-05-21 16:08 wouf
109 FIN D EXPLORATION POUR: /usr/project/sysA/chien
110
111 Chemin: /usr/project/sysA/chien/dogue
112 -rw-r--r-- 1 root root 0 2008-05-21 20:07 mechant
113 -rw-r--r-- 1 root root 0 2008-05-21 20:07 noir
114 FIN D EXPLORATION POUR: /usr/project/sysA/chien/dogue
115
116 Chemin: /usr/project/sysA/chien/labrador
117 -rw-r--r-- 1 root root 0 2008-05-21 20:07 beige
118 -rw-r--r-- 1 root root 0 2008-05-21 20:07 gentil
119 FIN D EXPLORATION POUR: /usr/project/sysA/chien/labrador
120
111 Chemin: /usr/project/sysA/test_dir1
112 drwxr-xr-x 2 root root 4096 2008-05-21 20:08 test_pb
113 -rw-r--r-- 1 root root 0 2008-05-05 14:41 fic
114 -rw-r--r-- 1 root root 0 2008-05-05 14:40 razc
115 -rw-r--r-- 1 root root 0 2008-05-05 14:41 toto
116 FIN D EXPLORATION POUR: /usr/project/sysA/test_dir1
117
118 Chemin: /usr/project/sysA/test_dir1/test_pb
119 FIN D EXPLORATION POUR: /usr/project/sysA/test_dir1/test_pb
120
118 Chemin: /usr/project/sysA/test_dir2
119 -rw-r--r-- 1 root root 0 2008-05-05 14:41 casquette
120 -rw-r--r-- 1 root root 0 2008-05-05 14:41 claquette
121 -rw-r--r-- 1 root root 0 2008-05-05 14:41 zoubida
122 FIN D EXPLORATION POUR: /usr/project/sysA/test_dir2
123
Malheuresement, j'ai détecté un soucis que vous pourrez aisément retrouver dans mon résultat, le compteur qui sert à inscrire le numéro de ligne déconne ... Lorsque que l'on descend dans l'arborescence ou que l'on reste au même niveau, cela ne pose pas de problème ... mais lors de la remontée au niveau supérieur, le compteur se décrémente ...

Je me doute qu'il y a un problème avec ma fonction récursive, mais je ne vois pas lequel ... pouvez vous m'aider ?

Pour les plus courageux, je laisse mon code ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
navig() {
	COMPTEUR_JOURNAL=$2;
	COMPTEUR_DOSSIER=0;
	#CE COMPTEUR SERVIRA A SELECTIONNER LE NOMBRE DE DOSSIER DU FICHIER JOURNAL A EXPLORER !
	#CELA EVITERA DE RE-UTILISER LES DOSSIERS SUPERIEURS
	echo -e " début de navig : on est dans $1";
 
 
	# ON PLACE LE CONTENU DU REPERTOIRE COURANT DANS LE JOURNAL TEMPORAIRE
	ls -l $1 > /usr/project/sources/journal_tmp1;
 
 
	#ON INSCRIT TOUS LES REPERTOIRES DU REP COURANT DANS LE JOURNAL A PARTIR DU JOURNAL TEMPORAIRE	
	COMPTEUR_DOSSIER=`expr $COMPTEUR_JOURNAL`
	awk -v REP="$1" -v COMPTEUR_JOURNAL_AWK=$COMPTEUR_JOURNAL 'BEGIN{
				printf("%d Chemin: %s\n",COMPTEUR_JOURNAL_AWK,REP);
				COMPTEUR_JOURNAL_AWK++;}
			substr($1,0,1) == "d" {
				printf("%d %s %s %s %s %s %s %s %s\n",COMPTEUR_JOURNAL_AWK,$1,$2,$3,$4,$5,$6,$7,$8);
				COMPTEUR_JOURNAL_AWK++;}' /usr/project/sources/journal_tmp1 >> /usr/project/sources/journal1	
 
 
 
	#ON RECUPERE LA DERNIERE VALEUR POUR LE COMPTEUR ET ON ATTRIBUE LA SUIVANTE
	#(DANS AWK, ON NE PEUT PAS RETOURNER DE VALEUR)
	#ON EN PROFITES POUR CONNAITRE LE NOMBRE DE REPERTOIRES A EXPLORER
	COMPTEUR_JOURNAL=`cat /usr/project/sources/journal1 | tail -1 | cut -d" " -f1`;
	COMPTEUR_DOSSIER=`expr $COMPTEUR_JOURNAL - $COMPTEUR_DOSSIER`;
	echo "compteur journal : $COMPTEUR_JOURNAL";
	COMPTEUR_JOURNAL=`expr $COMPTEUR_JOURNAL + 1`;
	echo "compteur dossier : il y a $COMPTEUR_DOSSIER rep à explorer";
 
 
	#A LA SUITE DU FICHIER JOURNAL, ON INSCRIT LES FICHIERS DU REP COURANT + UNE INDICATION DE FIN.
	awk -v REP="$1"	-v COMPTEUR_JOURNAL_AWK=$COMPTEUR_JOURNAL 'substr($1,0,1) == "-" {
			printf("%d %s %s %s %s %s %s %s %s\n",COMPTEUR_JOURNAL_AWK,$1,$2,$3,$4,$5,$6,$7,$8);
			COMPTEUR_JOURNAL_AWK++;}
		END{
			printf("%d FIN D EXPLORATION POUR: %s\n",COMPTEUR_JOURNAL_AWK,REP);
			COMPTEUR_JOURNAL_AWK++;
			printf("%d\n",COMPTEUR_JOURNAL_AWK);
			COMPTEUR_JOURNAL_AWK++;}' /usr/project/sources/journal_tmp1 >> /usr/project/sources/journal1
	COMPTEUR_JOURNAL=`cat /usr/project/sources/journal1 | tail -1 | cut -d" " -f1`;
	echo "le dernier fichier lu dans $1 à le numéro $COMPTEUR_JOURNAL";
	COMPTEUR_JOURNAL=`expr $COMPTEUR_JOURNAL + 1`;
 
	#ON VA RECUPERER LES REPERTOIRES DU REP COURANT POUR LES EXPLORER DE MANIERES RECURSIVES
	cat /usr/project/sources/journal1 | cut -d" " -f2- | grep ^d | cut -d" " -f8 | tail -$COMPTEUR_DOSSIER > /usr/project/sources/journal_tmp1;
	cat /usr/project/sources/journal_tmp1 | while read ligne;
	do
	echo -e "fin de navig, valeur de ligne : $1/$ligne";
	navig $1/$ligne $COMPTEUR_JOURNAL;
	done
}
 
 
#Demarrage du programme
clear;
#set -x;
COMPTEUR=0;
COMPTEUR_JOURNAL=1
#Ce compteur servira à se déplacer dans le fichier journal (ligne) pour trouver les éléments qui nous intéressent
 
until [ $COMPTEUR == 1 ]
do
 
 
	echo -n "Entrez le répertoire de référence :";
	REPERTOIRE="";
	read REPERTOIRE;
	if [ -d $REPERTOIRE ]
	then
		cd $REPERTOIRE;
		# Ecriture du journal 
		ls -l $REPERTOIRE > /usr/project/sources/journal_tmp1;
		awk -v DATE="`date`" -v REP="`pwd`" -v COMPTEUR_JOURNAL_AWK=$COMPTEUR_JOURNAL 'BEGIN{ 
								printf("%d Journal édité : %s\n",COMPTEUR_JOURNAL_AWK,DATE);
								COMPTEUR_JOURNAL_AWK++;
								printf("%d Rep de base : %s\n",COMPTEUR_JOURNAL_AWK,REP);
								COMPTEUR_JOURNAL_AWK++;
								printf("%d\n",COMPTEUR_JOURNAL_AWK);
								COMPTEUR_JOURNAL_AWK++;}' /usr/project/sources/journal_tmp1 > /usr/project/sources/journal1
	COMPTEUR_JOURNAL=4; #On a écrit trois lignes, on pointe donc sur la quatrième
	navig `pwd` $COMPTEUR_JOURNAL;
	COMPTEUR=1;
	else
	echo "$REPERTOIRE n'est pas un répertoire"
	fi	
done;
set +x;