Re-bonjour,

Je veux compter sans ls les objets dans un dossier, et ça semble très facile, exemple avec mon dossier /tmp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.