Як підрахувати загальну кількість рядків знайдених файлів?


10

Я запускаю a, 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,878s і повертає 227847 як кількість ліній. Але час знайдіть. -ім'я " .m" -print0 | xargs -0 wc -l працює в 0,769s і повертає належну кількість ліній 126464.
g24l

1

Ще одного простого способу знайти ні. рядки у файлі:

wc -l filename

Приклад:

wc -l myfile.txt 


-2
wc -l `find -name filename`

буде працювати ефективно.


… Чи ні, якщо шляхи містять пробіли чи символи, які викликають глобалізацію.
Каміль Маціоровський

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