Большинство ответов здесь не будут хорошо работать для большого количества файлов. Некоторые прервутся, если список имен файлов будет слишком длинным для одного вызова командной строки, другие неэффективны, потому что -exec
запускает новый процесс для каждого файла. Я считаю, что надежное и эффективное решение будет:
find . -type f -name "*.m" -print0 | xargs -0 cat | wc -l
Использование cat
в таком случае вполне нормально, поскольку его выходные данные передаются по прямой линии в wc
, поэтому в памяти одновременно сохраняется только небольшое количество содержимого файлов. Если для одного вызова cat
слишком много файлов, cat
будет вызываться несколько раз, но все выходные данные будут по-прежнему передаваться в один процесс wc
.