10

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

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

5 ответов5

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

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

wc -l filename

Пример:

wc -l myfile.txt 
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .