【问题标题】:Count lines in files of type *.cpp and *.h only仅计算 *.cpp 和 *.h 类型文件中的行数
【发布时间】:2011-08-13 07:27:38
【问题描述】:

我已经关注了 bash 脚本。它只计算 *.cpp 中的行数。如果没有 pugixml.cpp,我如何计算 *.h 文件中的行数?

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

【问题讨论】:

  • 你能澄清一下吗?您是指所有 .h 文件,还是每个现有 .cpp 文件对应的 .h 文件?

标签: c++ linux bash shell


【解决方案1】:

使用-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 {} +

【讨论】:

  • 没有找到命令'-exec',你的意思是:来自包'kexec-tools'的命令'kexec'(主)来自包'gexec'的命令'gexec'(宇宙)命令'jexec'从包“openjdk-6-jre-headless”(主)-exec:找不到命令
  • 大多数版本的 find 支持“-exec”命令。显然,你的没有。我知道的唯一版本不在 Solaris 上,在这种情况下,您可以使用 gfind 代替。
  • 通过删除找到的每个文件的单个进程来使命令更快: find 。 -type f (-name *.cpp -o -name *.h) ! -name pugixml.cpp | xargs wc -l
  • @Brian Using -exec + 告诉 find 只调用一次命令。将此与-exec \; 进行对比,-exec \; 每个文件调用一次命令。
【解决方案2】:

听起来你真的很想要sloccount

【讨论】:

    【解决方案3】:

    抓住它!
    要知道,如果你只想统计 *.h 文件,你会自动排除pugixml.cpp

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多