15

I'm running a find . -name pattern to find some files, and I'd like to elegantly get the total number of lines in these files.

How can I achieve that?

6 Answers 6

15

If your version of wc and find support the necessary options:

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

which will give you per-file counts as well as a total. If you want only the total:

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

Another option for versions of find that support it:

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

Takes each file and cats it, then pipes all that through wc set to line counting mode.

Or, [untested] strange filename safe:

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

Unfortunately the output of :

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

inserts extra lines. In order to get a reliable line count you should do:

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

This way you handle spaces correctly, get a line count for each file, and the total line count, faster and in style!!!

1
  • 1
    e.g. : time find . -name ".m" -exec cat '{}' \; | wc -l runs in 4.878s and returns 227847 as line count . But time find . -name ".m" -print0 | xargs -0 wc -l runs in 0.769s and returns the proper line count 126464 .
    – g24l
    Mar 21, 2011 at 10:53
1

Another easy way to find no. lines in a file:

wc -l filename

Example:

wc -l myfile.txt 
-1

Untested, but how about something like:

cat `find . -name "searchterm" -print` | wc -l
1
  • 1
    This will not work well with paths containing spaces or characters that trigger globbing. Aug 6, 2019 at 20:09
-2
wc -l `find -name filename`

will work efficiently.

2
  • … or not, if paths contain spaces or characters that trigger globbing. Aug 6, 2019 at 20:06
  • And even if it works, this reports the number of lines in each file, which is not an elegant way to get the total (as requested). Aug 7, 2019 at 5:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .