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 :
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 ...
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
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;
Partager