Un mystère de comptage pour éliminer "ls"
Re-bonjour,
Je veux compter sans ls les objets dans un dossier, et ça semble très facile, exemple avec mon dossier /tmp :
Code:
1 2 3 4 5 6
| $ count=0; for obj in /tmp; do count=$((count+1)); done; echo $count
1
$ count=0; for obj in /tmp/; do count=$((count+1)); done; echo $count
1
$ count=0; for obj in /tmp/*; do count=$((count+1)); done; echo $count
11 |
Voilà donc la bonne syntaxe, sur cette dernière ligne.
OK.
Maintenant, je fais ça :
Code:
1 2 3 4
| $ target=/media/vide
$ mkdir $target
$ count=0; for obj in $target/*; do count=$((count+1)); done; echo $count
1 |
C'est quoi ce "1" ? D'autant plus que
Code:
1 2 3 4
| $ ls /media/vide
(ligne vide)
$ ls -l /media/vide
total 0 |
Ah, cette imbécile de boucle se compte elle-même !, ça se voit bien à l'ajout de echo $obj :
Code:
1 2 3
| $ count=0; for obj in $target/*; do echo "$obj"; count=$((count+1)); done; echo $count
/media/vide/*
1 |
La bonne syntaxe, avec un test de validité de la variable $obj :
Code:
1 2 3 4 5 6 7 8 9
| $ count=0; for obj in $target/*; do [ -f "$obj" ] && count=$((count+1)); done; echo $count
0
$ touch /media/vide/bidon1; touch /media/vide/bidon2; touch /media/vide/bidon3
$ count=0; for obj in $target/*; do [ -f "$obj" ] && count=$((count+1)); done; echo $count
3
$ rm $target/*
(yCR yCR yCR)
$ count=0; for obj in $target/*; do [ -f "$obj" ] && count=$((count+1)); done; echo $count
0 |
Ça a l'air correct, alors cadeau.
:coucou: