如何从bash脚本搜索中排除方向,列出非空白非注释//行的数量?

时间:2012-03-06 15:02:25

标签: bash

我有这个bash脚本代码。它给出了非空白而不是注释(//)的行数。我在您的网站上将其他两个问题拼凑在一起。

我希望可以选择从递归中排除目录,当我应用它时,事情似乎不起作用。对bash来说很新。这是没有任何排除想法的基本版本,想知道是否有人可以推荐更改以从递归中排除方向:

find . -type f \( -name '*.js' -o -name *.qml \) -exec cat {} \; | sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d' | wc -l

以下似乎可以排除一个目录:

找到。 -path'./ui/applications/browser/unittests/qml'-prune -o(-name'* .js'-o -name .qml)-exec cat {} \; | sed'/ ^ \ s #/ d; / ^ \ s * $ / d; / ^ \ s * /// d'| wc -l <​​/ p>

但当我扩展到多个目录以排除时,错误:

find . -path './ui/applications/browser/unittests/qml' -prune -o './tools/demoBrowser/content' -prune -o \( -name '*.js' -o -name *.qml \) -exec cat {} \; | sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d' | wc -l

你看到我的语法错误吗?在后一次尝试中,我收到消息:

'find:路径必须位于表达式'

之前

1 个答案:

答案 0 :(得分:1)

命令查找有几种方法可以忽略文件/目录。在这里,我给你几个找到选项。

  • 使用-regex pattern,您可以使用正则表达式排除所需的任何路径。
  • 使用-path-prune忽略目录。在手册页中有一个很好的例子。

我不能给出具体的命令/脚本。因为我不知道你的目录结构和你想忽略的文件/目录。

无论如何,您真的应该阅读find的手册页以获取详细信息。

来自查找手册页:

  

-path pattern

     
    

文件名与shell图案模式匹配。元字符可以                 不要特别对待'/'或'。';所以,例如,
                          find . -path "./sr*sc"
                将打印一个名为'./src/misc'的目录的条目(如果有的话)                 存在)。要忽略整个目录树,请使用-prune                 而不是检查树中的每个文件。例如,跳过                 目录'src / emacs'及其下的所有文件和目录,                 并打印找到的其他文件的名称,做类似的事情                 这样的:
                          find . -path ./src/emacs -prune -o -print
                请注意,模式匹配测试适用于整个文件名,                 从命令行中命名的起点之一开始。                 只有在这里使用绝对路径名才有意义                 相关的起点也是一条绝对的道路。这意味着                 这个命令永远不会匹配任何东西:
                          find bar -path /foo/bar/myfile -print
                HP-UX find也支持谓词-path                 在即将推出的POSIX标准版本中。