假设我想查找包含.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。你知道这样的选择吗?
答案 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