Bonjour,
J'essaye de passer un script de Solaris à Linux, le script fonctionne très ben sous Solaris.
C'est une "simple" fonction qui parcours un répertoire et renvoi un nom de fichier.
En pratique :
Typiquement on appelle cette fonction dans une boucle du genre :
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 #_________________________ FONCTION DE SCRUTATION DE REPERTOIRE ________________ # # Param 1 : nom du repertoire a scruter # Param 2 : nom du dernier fichier traite # Param 3 : type de recherche f pour fichier ou d pour repertoire # # Retour de la fonction : # La variable "Retour_Scrut" contient le nom du fichier suivant # Scrut_Rep() { if [ ! -d "$1" ]; then Retour_Scrut=""; return fi # on remplace dans le path de scrutation '/' par '\/' Sub_scrut=`echo $1 | sed -e "s/\/$//" -e "s/$/\//" | sed -e "s/\//\\\\\\\\\//g"` Retour_Scrut=`find $1 -type $3 | sed -e "s/$Sub_scrut//" | awk '{ if (PREC != "" ) { while ( $0!=PREC && getline == 1 ) ; getline } while ( index($0,"/")!=0) getline print $0 exit } ' PREC="$2"` }
Sur Solaris, ça va m'afficher la liste des fichiers du répertoire et on sort du while.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Scrut_Rep $Rep_traite "" f while [ "$Retour_Scrut" != "" ]; do echo "$Retour_Scrut" Scrut_Rep $Rep_traite "$Retour_Scrut" f done
Par contre sous Linux, il va tourner indéfiniment dans la boucle et afficher indéfiniment le nom du dernier fichier présent.
J'ai du mal à piger la logique de la fonction à vrai dire, je comprend pas le index($0,"/")!=0 par exemple, je sais que ça retourne la position du premier / mais pourquoi utiliser ça.
Enfin j'ai planché la dessus quelques heures déjà et impossible de trouve pourquoi le comportement est différent sous Linux. Après il y a d'autres moyens de faire la même chose mais j'ai envie de comprendre ^^
Peut-être que quelqu'un aura une idée géniale...
Partager