web-dev-qa-db-fra.com

compter un fichier spécifique dans le répertoire

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.

1
deepblue_86

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.

4
steeldriver

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
4
heemayl