LINUX.ORG.RU

Не уверен, что это то упрощение, которое тебе нужно, но должно быть быстрее, т.к. кота не трогаем.

find . -name '*.c' -o -name '*.h' | xargs | wc -l | paste -sd+ | bc
можно через exec но я синтаксис не помню.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

наверно так делал:

find . -name '*.c' -o -name '*.h' | xargs  wc -l

в последней строке wc выводит общее кол-во строк

IvanR ★★★
() автор топика
Ответ на: комментарий от IvanR

в последней строке wc выводит общее кол-во строк

Аа, ну тоды да

ya-betmen ★★★★★
()

Почему бы не использовать специализированную утилиту? cloc считает строчки кода.

anonymous
()

У find есть опция -exec, man find.

pandrey ★★
()
Ответ на: комментарий от mky

хм, тогда котом, как уже предложили -exec cat {} я так понимаю, что cat будет вызваться поочередно для каждого найденного имени, кстати, ошибка будет, что имена фалов не влезли или баш это молча пропустит?

IvanR ★★★
() автор топика
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от QsUPt7S

как ни странно, но find вызовет wc только для файлов ‘*.h’, проверено, чтобы для всех найденных файлов вызывал, нужно так как-то писать

find . -name '*.c' -exec prog {} \; -o -name '*.h' -exec prog {} \;

проверьте сами, обрадуйтесь заморочкам синтаксиса find

IvanR ★★★
() автор топика
Ответ на: комментарий от IvanR

надо в скобки брать

find \( -name '*.c' -o -name '*.h' \) -exec ...

futurama ★★★★★
()
Ответ на: комментарий от IvanR

проверьте сами, обрадуйтесь заморочкам синтаксиса find

Действительно, прикольно. :)

Судя по всему, поскольку между -name '*.h' и -exec wc -l {} + есть только пробел, find тактует приведённую команду как find -name '*.c' -o -name '*.h' -a -exec wc -l {} + выбрасывая результат первого операнда оператора -o.

Исправленный вариант:

find \( -name '*.c' -o -name '*.h' \) -exec wc -l {} + | tail -n 1
QsUPt7S
()
Ответ на: комментарий от QsUPt7S

или find . -regextype egrep -regex '\.c|\.h'

IvanR ★★★
() автор топика
Ответ на: комментарий от ashot

и комментарии. Но условия подсчета не указаны и ТС хотел wc -l

Так зачем ты мне про пустые строки? Я тебя так сильно удивил?

futurama ★★★★★
()
Ответ на: комментарий от ashot

Я этим тоже не пользуюсь, т.к. не считаю find негуманоидным

futurama ★★★★★
()
Ответ на: комментарий от IvanR

В вашем варианте xargs (если файлов будет много) вызовет wc -l несколько раз, будет много вывода, и только от последнего wc будет видно total. И в конструкции find + xargs не участвует bash, они сами формируют команду и список аргументов.

Вариант с ″exec cat \{} \+″ уже показали, там будет вызвано минимальное кол-во ″cat″ (у каждого не более ARG_MAX) и всё в pipe и на вход одного ″wc″. Если просто ″-exec cat {}″, то да, на каждый файл отдельный cat, но весь их выхлоп аналогично будет в один pipe.

Можно из ″find ... \{} \+″ запускать скрипт, делающий ″wc -l | tail -n1″, а потом вывод суммировать...

Можно попробовать:

find ... -print0 | wc -l --files0-from=- | tail -n1

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.