2011-04-26 76 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' 
相關問題