Как это:
grep -ERn '^[[:space:]]*//' root_directory
-E
использует "расширенные" регулярные выражения
* -R
делает его рекурсивными каталогами
-n
печатаетимена файлов с номерами строк
Затем вы можете легко обработать этот список для поиска последовательных совпадений - просто найдите блок, в котором номер строки увеличивается на единицу на строку вывода.
Это предполагает, что вы нене хотите сопоставлять строки следующим образом:
int x = foo; // some comment
Но только строки, которые являются полностью комментариями:
// this is a comment
Обновление :
Вот короткий Python-скрипт для обработки выходных данных выше grep
:
import sys
filenames_of_interest = set()
filename = None
prev_line_num = 0
comment_count = 0
for line in sys.stdin.readlines():
this_filename, line_num, _ = line.split(':',2)
line_num = int(line_num)
if this_filename != filename:
comment_count = 0
filename = this_filename
elif line_num != prev_line_num + 1:
comment_count = 0
prev_line_num = line_num
comment_count += 1
if comment_count > 20:
filenames_of_interest.add(filename)
print "files with blocks of comments:"
for i in filenames_of_interest:
print ' ', i
Он не будет корректно обрабатывать файлы с двоеточиями в названии, но его не должно быть сложно изменитьс этим, если это проблема.