Bonjour,
1 2
| # on remplace dans le path de scrutation '/' par '\/'
Sub_scrut=`echo $1 | sed -e "s/\/$//" -e "s/$/\//" | sed -e "s/\//\\\\\\\\\//g"` |
Ici, le commentaire n'est pas complet, on remplace les '/' par '\\/' et surtout on s'arrange pour que la fin du répertoire soit '\\/', ceci est important pour la suite:
find $1 -type $3 | sed -e "s/$Sub_scrut//
Ici, pour tout les fichier trouver par find, on retire le nom complet du répertoire ('/' de fin compris), ce qui fait que lorsque l'on trouve un '/' dans la liste, cela veut dire que l'on a bien un fichier mais qui ne se trouve pas dans le répertoire scanné mais dans un de ces sous-répertoire.
Coté awk, un petit commentaire:
1 2 3 4 5 6
| if (PREC != "" )
{
# Omission des fichiers deja traites lors des precedents appels de la fonction
while ( $0!=PREC && getline == 1 ) ;
getline
} |
Ici l'indentation est fausse et prête à confusion, le 2ème getline ne fait pas partie de la boucle while mais uniquement du corps du if.
Bon maintenant, coté correctif, en fait, je pense que la différence est liée au find de linux et solaris, car comme c'est le cas sous linux, si le find ne rajoute pas une ligne vide finale, alors cela boucle indéfiniment et je pense que le find de solaris en rajoute un (pur spéculation, je ne peux actuellement pas le vérifier).
Pour le tester sous linux, il suffit de remplacer:
par
(find $1 -type $3 && echo)
Mais le mieux est de rajouter une vrai vérification, et donc de remplacer:
par:
Partager