我们有一个Python应用程序,想要统计特定目录及其子目录下的所有代码行。
我们不需要忽略注释,但是我们希望忽略包含测试用例的所有文件。
测试用例文件的路径在路径0 0.9000
1 0.9000
2 1.0663
中始终具有/tests/
。
我使用下面的命令查找计数,但没有排除测试文件。
(e.g. /python/trieus/persistence/service/tests/batch_service_tests.py)
这里的正确语法是什么?
答案 0 :(得分:1)
通过将第一个.
更改为*
,可以排除任何级别的目录。因此find -name "*.py" -not -path "*/tests/*"
会忽略任何深度级别的名为"tests"
的目录中的文件。
因此命令将如下所示:
find . -name "*.py" -not -path "*/tests/*" | xargs wc -l | sort
我希望这会有所帮助!
答案 1 :(得分:1)
您可以这样做:
find . -type d -name tests -prune -o -type f -name '*.py' \
-exec grep -hxc '.*' {} + | paste -sd+ | bc
find . -type d -name tests -prune
不包括tests
目录-type f -name '*.py'
仅匹配.py
个文件-exec grep -hxc '.*' {} +
获得单独的行,您可以在此处修改正则表达式模式以满足您的需求paste -sd+
将输出的格式设置为一行,中间插入+
bc
在其STDIN数据上进行加法我建议您一次走一步,以更好地了解整个事情。
请注意,这不会获得实际的LOC,而只会显示行数。
在系统上的示例目录中运行的示例:
% find . -type d -name tests -prune -o -type f -name '*.py' -exec grep -hxc '.*' {} + | paste -sd+ | bc
5594