我有这个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:路径必须位于表达式'
之前答案 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标准版本中。