Как посчитать все строки кода в каталоге рекурсивно? - PullRequest
1458 голосов
/ 31 августа 2009

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

wc -l *.php 

Эта команда прекрасно работает в данном каталоге, но игнорирует подкаталоги. Я думал, что это может сработать, но возвращается 74, что, безусловно, не так ...

find . -name '*.php' | wc -l

Какой правильный синтаксис для подачи во всех файлах?

Ответы [ 41 ]

2 голосов
/ 08 октября 2014

, хотя мне нравятся сценарии, я предпочитаю этот, так как он также показывает сводку по каждому файлу, пока общая

wc -l `find . -name "*.php"`
1 голос
/ 04 апреля 2017

Я делаю это так:

вот реализация файла lineCount.c:

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 

int getLinesFromFile(const char*);

int main(int argc, char* argv[]) {
   int total_lines = 0; 
   for(int i = 1; i < argc; ++i) {
       total_lines += getLinesFromFile(argv[i]); // *argv is a char*        
   }    

   printf("You have a total of %d lines in all your file(s)\n",    total_lines);
   return 0;
}


int getLinesFromFile(const char* file_name) {
    int lines = 0;
    FILE* file;
    file = fopen(file_name, "r");
    char c = ' ';
    while((c=getc(file)) != EOF) if(c == '\n') ++lines;
    fclose(file);   
    return lines;
}

Теперь откройте командную строку:

и введите gcc lineCount.c, затем введите ./a.out *.txt Это отобразит общее количество строк файлов, заканчивающихся на .txt в вашем каталоге.

1 голос
/ 09 августа 2016

Я хотел проверить несколько типов файлов, и мне было лениво вычислять сумму вручную. Поэтому я использую это сейчас, чтобы получить общее количество за один раз.

find . -name '*.js' -or -name '*.php' | xargs wc -l | grep 'total'  | awk '{ SUM += $1; print $1} END { print "Total text lines in PHP and JS",SUM }'

79351
15318
Всего строк текста в PHP и JS 94669

Это позволяет вам объединять несколько типов расширений, по которым вы хотите фильтровать. Просто добавьте их в часть -name '*.js' -or -name '*.php' и, возможно, измените сообщение по вашему вкусу

1 голос
/ 11 января 2015

Еще одна команда для получения суммы всех файлов (конечно, для Linux)

find ./ -type f -exec wc -l {}  \; | cut -d' ' -f1 | paste -sd+ | bc

Основное отличие от других ответов:

  1. с использованием find -exec ,
  2. с использованием пасты (с разрезом) ,
  3. с использованием вс
1 голос
/ 15 августа 2016

сначала измените каталог, в который вы хотите узнать количество строк. например, если я хочу знать количество строк во всех файлах каталога с именем sample. дать $cd sample. затем попробуйте команду $wc -l *, которая вернет число строк для каждого файла, а также общее количество строк во всем каталоге в конце

1 голос
/ 10 июля 2013
$cd directory
$wc -l* | sort -nr
1 голос
/ 22 августа 2013

В системе Windows установлена ​​занятая коробка. Итак, вот что я сделал.

ECHO OFF
for /r %%G in (*.php) do (
busybox grep . "%%G" | busybox wc -l
) 
1 голос
/ 01 февраля 2019

Если файлов слишком много, лучше просто посмотреть общее количество строк.

find . -name '*.php' | xargs wc -l | grep -i ' total' | awk '{print $1}'
0 голосов
/ 28 июня 2019

Похоже на ответ Шиззмо , но уродливее и точнее. Если вы используете его часто, измените его в соответствии с вашими потребностями и поместите в скрипт.

Этот пример:

  1. Правильно исключает пути, которые не являются вашим кодом (вообще не пройдены find)
  2. Отфильтровывает составные расширения и другие файлы, которые вы хотите игнорировать
  3. Включает только актуальные файлы указанных вами типов
  4. Игнорирует пустые строки
  5. Дает общее число
find . \! \( \( -path ./lib -o -path ./node_modules -o -path ./vendor -o -path ./any/other/path/to/skip -o -wholename ./not/this/specific/file.php -o -name '*.min.js' -o -name '*.min.css' \) -prune \) -type f \( -name '*.php' -o -name '*.inc' -o -name '*.js' -o -name '*.scss' -o -name '*.css' \) -print0 | xargs -0 cat | grep -v '^$' | wc -l
0 голосов
/ 21 июля 2010
cat \`find . -name "*.php"\` | wc -l
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...