是否有一个使用外部命令过滤结果的`find`命令选项?

时间:2016-06-04 14:04:47

标签: shell

假设我想查找包含.c - 函数的给定目录(和子目录)中的所有main()个文件。我这样做的方式是:

find . -name "*.c" -type f -print0 | while IFS= read -r -d $'\0' fl; do
    [ -r "$fl" ] && ctags -x --c-kinds=f "$fl" | grep -q "^main" && echo "$fl"
done

这里的神奇之处在于ctags -x --c-kinds=f myfile.c解析myfile.c作为c编译器,并列出所有函数定义。输出行以" main"开头。 (因此grep -q "^main"),在main()中有一个myfile.c - 函数。

我认为如果find返回ctags -x --c-kinds=f "$fl" | grep -q "^main"退出状态,可能有办法告诉0仅显示结果。我发现整个循环和回声的东西有点hacky。你知道这样的选择吗?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

find . -name "*.c" -type f -exec \
  sh -c 'ctags -x --c-kinds=f "$1" | grep -q "^main" && echo "$1"' sh {} \;

写作可能更惯用:

find . -name "*.c" -type f -exec \
  sh -c 'ctags -x --c-kinds=f "$1" | grep -q "^main"' sh {} \; -print