Re-bonjour,
Je veux compter sans ls les objets dans un dossier, et ça semble très facile, exemple avec mon dossier /tmp :
Voilà donc la bonne syntaxe, sur cette dernière ligne.
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
OK.
Maintenant, je fais ça :
C'est quoi ce "1" ? D'autant plus que
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
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
4 $ ls /media/vide (ligne vide) $ ls -l /media/vide total 0
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 $ count=0; for obj in $target/*; do echo "$obj"; count=$((count+1)); done; echo $count /media/vide/* 1
Ça a l'air correct, alors cadeau.
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
![]()
Partager