Я запускаю find . -name pattern
чтобы найти некоторые файлы, и я хотел бы элегантно получить общее количество строк в этих файлах.
Как я могу этого достичь?
Если ваша версия wc
и вы find
поддержку нужных опций:
find . -name pattern -print0 | wc -l --files0-from=-
который даст вам количество файлов и общее количество. Если вы хотите только общее количество:
find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1
Еще один вариант для версий find
которые его поддерживают:
find . -name pattern -exec cat {} + | wc -l
$ find . -name '*.txt' -exec cat '{}' \; | wc -l
Принимает каждый файл и cat
его, затем передает все это через wc
в режим подсчета строк.
Или [не проверено] странное имя файла безопасно:
$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l
К сожалению вывод:
find . -iname "yourpattern" -exec cat '{}' \; |wc -l
вставляет дополнительные строки. Для того, чтобы получить надежный счетчик строк, вы должны сделать:
find . -name "yourpattern" -print0 | xargs -0 wc -l
Таким образом вы правильно обрабатываете пробелы, получаете количество строк для каждого файла и общее количество строк быстрее и в стиле !!!
Еще один простой способ найти нет. строки в файле:
wc -l filename
Пример:
wc -l myfile.txt
Не проверено, но как насчет чего-то вроде:
cat `find . -name "searchterm" -print` | wc -l