Fonction de scrutation de répertoire
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 :
Code:
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"`
} |
Typiquement on appelle cette fonction dans une boucle du genre :
Code:
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 |
Sur Solaris, ça va m'afficher la liste des fichiers du répertoire et on sort du while.
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...
Afficher les fichiers d'un répertoire en ignorant les sous-répertoires
Citation:
Bonsoir,
Pour ce que j'en comprends, il s'agit d'afficher les fichiers d'un répertoire en omettant les sous-répertoires et les fichiers de ces sous-répertoires.
C'est une façon de faire très lourde et compliquée :?
Pour que ça fonctionne, j'ai corrigé comme suit :
-v PREC="$2"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Retour_Scrut=`find $1 -type $3 | sed -e "s/$Sub_scrut//" | awk -v PREC="$2" '
{
# Autre appel de la fonction que le 1er appel
if (PREC != "" )
{
# Omission des fichiers deja traites lors des precedents appels de la fonction
while ( $0!=PREC && getline == 1 ) ;
getline
}
while ( index($0,"/")!=0)
{
# Detection et omission des repertoires
getline
}
print $0
exit
}' `
} |