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 ?
Réponse
Trop de publicités?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.
- Réponses précédentes
- Plus de réponses