Как посчитать общее количество строк найденных файлов?


10

Я бегу, find . -name patternчтобы найти некоторые файлы, и я хотел бы элегантно получить общее количество строк в этих файлах.

Как я могу этого достичь?

Ответы:


9

Если ваша версия 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 

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

Принимает каждый файл и catпросматривает его, затем передает все это через wcустановленный режим подсчета строк.

Или [не проверено] странное имя файла безопасно:

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

1

К сожалению вывод:

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

вставляет дополнительные строки. Для того, чтобы получить надежный счетчик строк, вы должны сделать:

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

Таким образом вы правильно обрабатываете пробелы, получаете количество строк для каждого файла и общее количество строк быстрее и в стиле !!!


1
например: время найти. -name " .m" -exec cat '{}' \; | wc -l работает в 4.878 с и возвращает 227847 как количество строк. Но время найти. имя " .m" -print0 | xargs -0 wc -l выполняется за 0,769 с и возвращает правильное количество строк 126464.
g24l

1

Еще один простой способ найти нет. строки в файле:

wc -l filename

Пример:

wc -l myfile.txt 

-1

Не проверено, но как насчет чего-то вроде:

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

Это не будет хорошо работать с путями, содержащими пробелы или символы, которые вызывают сглаживание.
Камиль Мачоровски

-2
wc -l `find -name filename`

будет работать эффективно.


… Или нет, если пути содержат пробелы или символы, которые вызывают сбои.
Камиль Мачоровски

И даже если это работает, в этом отчете указывается количество строк в каждом файле, что не является элегантным способом получения итоговой суммы (согласно запросу).
Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.