131 votes

Quelle est la meilleure façon de compter les résultats des "recherches" ?

Ma solution actuelle serait la suivante find <expr> -exec printf '.' \; | wc -c mais cela prend beaucoup trop de temps lorsqu'il y a plus de 10000 résultats. Existe-t-il un moyen plus rapide/meilleur de procéder ?

1voto

seyfahni Points 46

J'avais besoin de quelque chose où je ne prendrais pas toute la sortie de find car certaines autres commandes exécutées impriment aussi des choses.

Sans avoir besoin de fichiers temporaires, cela n'est possible qu'avec un grand avertissement : vous risquez d'obtenir (beaucoup) plus d'une ligne de sortie car la commande de sortie sera exécutée une fois pour chaque 800~1600 fichiers.

find . -print -exec sh -c 'printf %c "$@" | wc -c' '' '{}' + # just print the numbers
find . -print -exec sh -c 'echo "Processed `printf %c "$@" | wc -c` items."' '' '{}' +

Génère ce résultat :

Processed 1622 items.
Processed 1578 items.
Processed 1587 items.

Une alternative est d'utiliser un fichier temporaire :

find . -print -fprintf tmp.file .
wc -c <tmp.file # using the file as argument instead causes the file name to be printed after the count

echo "Processed `wc -c <tmp.file` items." # sh variant
echo "Processed $(wc -c <tmp.file) items." # bash variant

El -print dans chacune des commandes de recherche n'influencera pas du tout le comptage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X