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?

GJ.
la source

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 
En pause jusqu'à nouvel ordre.
la source
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
Majenko
la source
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 !!!

g24l
la source
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 
vkGunasekaran
la source
-1

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

cat `find . -name "searchterm" -print` | wc -l
Michael Schubert
la source
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.

Mahesh U
la source
… 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