2011-04-26 41 views
3

我已经在使用bash脚本。它只计算* .cpp中的行数。如何在没有pugixml.cpp的情况下在* .h文件中计算行数?仅在类型为* .cpp和* .h的文件中计数行

find . -type f -name \*.cpp -and ! -name \pugixml.cpp -exec cat '{}' + | wc -l 
+2

你能澄清?你的意思是所有.h文件,还是每个现有的.cpp文件对应的.h文件? – 2011-04-26 19:18:00

回答

10

使用-o查找名称为*.cpp*.h文件,并添加括号中的优先级。请注意,我删除了-and\pugixml中的反斜杠,因为它们是不必要的(尽管无害)。你

find . -type f \(-name \*.cpp -o -name \*.h \) ! -name pugixml.cpp -exec cat {} + | wc -l 

还能减少find -exec cat {} + | wc -l简单find -exec wc -l {} +。这将显示每个文件的统计数据以及总数。

find . -type f \(-name \*.cpp -o -name \*.h \) ! -name pugixml.cpp -exec wc -l {} + 
+0

没有找到'-exec'命令,你的意思是: 'kexec-tools'命令'kexec'(主) 'gexec'命令'gexec'(宇宙) 命令'jexec'来自'openjdk' -6-jre-headless'(main) -exec:找不到命令 – 2011-04-26 19:20:56

+1

大多数find版本都支持“-exec”命令。显然,你的不。我知道的唯一版本不在Solaris上,在这种情况下,您可以使用gfind。 – 2011-04-26 19:27:43

+0

通过删除找到的每个文件的单个进程来更快速地执行命令:find。 -type f \(-name \ *。cpp -o -name \ *。h \)! -name pugixml.cpp | xargs wc -l – 2011-04-27 13:25:17

0

Grep it!
你知道,如果你想只计算是* .h文件,你会自动排除pugixml.cpp

sloccount --duplicates --wide --details . | grep -e "\.h$" 

如果你真的需要明确排除pugi:

sloccount --duplicates --wide --details . | grep -e "\.h$" | grep -v -e 'pugixml.cpp' 
相关问题