Comment compter le nombre total de lignes de fichiers trouvés?


10

J'exécute un find . -name patternpour trouver des fichiers, et j'aimerais obtenir avec élégance le nombre total de lignes dans ces fichiers.

Comment puis-je y parvenir?

Réponses:


9

Si votre version de wcet prend en findcharge les options nécessaires:

find . -name pattern -print0 | wc -l --files0-from=-

ce qui vous donnera un nombre de fichiers par fichier ainsi qu'un total. Si vous ne voulez que le total:

find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1

Une autre option pour les versions findqui le supportent:

find . -name pattern -exec cat {} + | wc -l 

2
$ find . -name '*.txt' -exec cat '{}' \; | wc -l

Prend chaque fichier et le cats, puis dirige tout cela à travers le wcmode de comptage de lignes.

Ou, nom de fichier étrange [non testé] sûr:

$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l

1

Malheureusement, la sortie de:

find . -iname "yourpattern" -exec cat '{}' \; |wc -l

insère des lignes supplémentaires. Pour obtenir un nombre de lignes fiable, vous devez:

find . -name "yourpattern" -print0 | xargs -0 wc -l

De cette façon, vous gérez les espaces correctement, obtenez un nombre de lignes pour chaque fichier et le nombre total de lignes, plus rapidement et avec style !!!


1
par exemple: recherche de temps. -name " .m" -exec cat '{}' \; | wc -l s'exécute en 4.878s et renvoie 227847 comme nombre de lignes. Mais le temps trouve. -name " .m" -print0 | xargs -0 wc -l s'exécute en 0.769s et renvoie le nombre de lignes approprié 126464.
— g24l

1

Un autre moyen facile de trouver non. lignes dans un fichier:

wc -l filename

Exemple:

wc -l myfile.txt 

-1

Non testé, mais que diriez-vous de quelque chose comme:

cat `find . -name "searchterm" -print` | wc -l

Cela ne fonctionnera pas bien avec des chemins contenant des espaces ou des caractères qui déclenchent la globalisation.
— Kamil Maciorowski

-2
wc -l `find -name filename`

fonctionnera efficacement.


… Ou pas, si les chemins contiennent des espaces ou des caractères qui déclenchent la globalisation.
— Kamil Maciorowski

Et même si cela fonctionne, cela indique le nombre de lignes dans chaque fichier, ce qui n'est pas une manière élégante d'obtenir le total (comme demandé).
— Scott
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.