Как было указано в комментариях, cat file | wc -l
не эквивалентно wc -l file
, потому что первый выводит только число, тогда как последний печатает число и имя файла. Аналогично cat * | wc -l
выводит только число, тогда как wc -l *
выводит строку информации для каждого файла.
В духе простоты давайте вернемся к фактически заданному вопросу:
если я хочу подсчитать строки кода, тривиальная вещь будет
cat * .c * .h | wc -l
Но что, если у меня несколько подкаталогов?
Во-первых, вы можете упростить даже свою тривиальную команду до:
cat *.[ch] | wc -l
И, наконец, эквивалент многих подкаталогов:
find . -name '*.[ch]' -exec cat {} + | wc -l
Это, возможно, можно улучшить многими способами, например, ограничивая сопоставленные файлы только обычными файлами (не каталогами), добавив -тип f
, но данная команда find
является точный рекурсивный эквивалент cat *. [Ch]
.