Supposons que je dois compter chaque fichier du répertoire qui se termine par o. (par exemple ab12.14o, 70010340.09o). Quelle commande dois-je utiliser?
J'ai essayé ls *.o | wc
mais ça ne marche pas.
Vous avez probablement juste besoin de supprimer le .
de votre expression glob - ce qui la fait correspondre uniquement aux fichiers se terminant par .o
plutôt que o
Cependant, une meilleure façon serait d'utiliser find
:
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
Vous pouvez ajouter -type f
pour le limiter aux fichiers simples (exclure les répertoires) et supprimer le -maxdepth 1
si vous voulez compter récursivement.
N'utilisez pas ls
.
Utilisez un tableau Shell pour stocker le nom des fichiers se terminant par o
:
files=( *o )
Maintenant, faites:
echo "${#files[@]}"
pour obtenir le nombre de fichiers.
@steeldriver a fait valoir son point de vue, si vous n'avez aucun nom de fichier correspondant, le modèle glob sera pris littéralement. Pour cette raison, même s'il n'y a aucun nom de fichier correspondant, le nombre de fichiers sera toujours égal à 1.
Pour résoudre ce problème, définissez l'option nullglob
ou failglob
Shell:
shopt -s nullglob
shopt -s failglob