Manifestement, ton script n'est pas complet : il manque les fins de boucles for.
En plus:
- le cd "/home/$a" à l'intérieur de la boucle change ton répertoire courant,
il faut que tu reviennes au répertoire parent en fin de boucle.
- les tests avec des continue ne simplifient pas la compréhension du script:
ll vaut mieux inverser le test.
- les tests [ $a = \* ] et [ $b = \* ] sont inutiles, voire faux:
- soit $a vaut * parce que le répertoire /home est vide et le test [ -d "$a" ] le traite correctement
- soit $a vaut * parce /home contient un répertoire nommé *
(ça peut arriver, les noms de fichiers peuvent contenir des métacaractères)
et ton script va l'ignorer alors qu'il aurait dû le traiter.
- si tu veux tester que $b est un fichier le test devrait être -f
et non -e qui ne teste que l'existence et qui est vrai aussi
pour un répertoire.
cd /home
for a in * ; do
# traiter uniquement les répertoires
if [ -d "$a" ] ; then
cd "/home/$a"
for b in * ; do
# traiter uniquement les fichiers
if [ -f "$b" ] ; then
# TRAITEMENT
fi
done
fi
cd .. # retour au repertoire /home
done
[^] # Re: Ben, man bash ...
Posté par netsurfeur . En réponse au message utilisation de S_ISDIR et S_ISREG. Évalué à 3.