Как посчитать все строки кода в каталоге рекурсивно?

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

1469
задан Good Person 9 November 2012 в 01:26
поделиться

9 ответов

Попробуйте:

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

Инструмент SLOCCount также может помочь.

Он предоставит точные строки исходного кода рассчитывать на что угодно иерархия, на которую вы указываете, а также некоторую дополнительную статистику.

Отсортированный вывод: find. -name '* .php' | xargs wc -l | sort -nr

2526
ответ дан 22 November 2019 в 20:15
поделиться

очень просто

find /path -type f -name "*.php" | while read FILE
do
    count=$(wc -l < $FILE)
    echo "$FILE has $count lines"
done
4
ответ дан 22 November 2019 в 20:15
поделиться

Вы не указали, сколько файлов существует или каков желаемый результат. Это то, что вы ищете:

find . -name '*.php' | xargs wc -l
34
ответ дан 22 November 2019 в 20:15
поделиться

Есть небольшой инструмент под названием sloccount для подсчета строк кода в каталоге. Следует отметить, что он делает больше, чем вы хотите, поскольку он игнорирует пустые строки / комментарии, группирует результаты по языкам программирования и вычисляет некоторую статистику.

18
ответ дан 22 November 2019 в 20:15
поделиться

Вам нужен простой цикл for :

total_count=0
for file in $(find . -name *.php -print)
do
    count=$(wc -l $file)
    let total_count+=count
done
echo "$total_count"
13
ответ дан 22 November 2019 в 20:15
поделиться

Для другого однострочника:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

работает с именами с пробелами, выводит только одно число.

456
ответ дан 22 November 2019 в 20:15
поделиться

Вот гибкий с помощью более старого Python (работы, по крайней мере, в Python 2.6) соединяющийся @Shizzmo, прекрасный один лайнер. Просто заполните эти types список с типами файлов, которые Вы хотите считаемый в исходной папке и стреляете:

#!/usr/bin/python

import subprocess

rcmd = "( find ./ -name '*.%s' -print0 | xargs -0 cat ) | wc -l"
types = ['c','cpp','h','txt']

sum = 0
for el in types:
    cmd = rcmd % (el)
    p = subprocess.Popen([cmd],stdout=subprocess.PIPE,shell=True)
    out = p.stdout.read().strip()
    print "*.%s: %s" % (el,out)
    sum += int(out)
print "sum: %d" % (sum)
0
ответ дан 22 November 2019 в 20:15
поделиться

Если Вы хотите считать LOC, Вы записали, Вы, возможно, должны исключить некоторые файлы.

Для проекта Django, можно хотеть проигнорировать migrations и static папки. Для проекта JS можно исключить все изображения или все шрифты.

find . \( -path '*/migrations' -o -path '*/.git' -o -path '*/.vscode' -o -path '*/fonts' -o -path '*.png' -o -path '*.jpg' -o -path '*/.github' -o -path '*/static' \) -prune -o -type f -exec cat {} + | wc -l

Использование здесь следующие: */folder_name */.file_extension

Для списка файлов измените более позднюю часть команды:

find . \( -path '*/migrations' -o -path '*/.git' -o -path '*/.vscode' -o -path '*/fonts' -o -path '*.png' -o -path '*.jpg' -o -path '*/.github' -o -path '*/static' \) -prune -o --print
1
ответ дан 22 November 2019 в 20:15
поделиться
cat \`find . -name "*.php"\` | wc -l
0
ответ дан 22 November 2019 в 20:15
поделиться