我有一个find命令,我想对其进行排序,以便某些目录的条目排在最后。原因是,此列表将被传递到etags以创建标签表,并且我希望某些第三方工具目录在我积极编辑的所有代码之后。
有没有人能推荐一种简单的方法来对列表进行排序,以改变我的makefile规则?下面是当前的规则:
tags:
rm -f ../TAGS
find .. \( -not -regex '.*include/.*' \) \
-a \( -name '*.h' -o -name '*.hh' -o -name '*.y' \
-o -name '*.l' -o -name '*.cc' -o -name '*.cpp' \
-o -name '*.c' -o -name '*.inl' \) \
| xargs etags -o ../TAGS --append例如,以"../flexlm/“或"../src/librsync”开头的条目应该位于与这些模式之一不匹配的条目之后。
发布于 2010-09-13 11:33:45
将多个find命令放入一个大括号中,并通过管道将其导入xargs
# the single quotes take care of the escaping
pattern='( -not -regex ".*include/.*" )
-a ( -name "*.h" -o -name "*.hh" -o -name "*.y"
-o -name "*.l" -o -name "*.cc" -o -name "*.cpp"
-o -name "*.c" -o -name "*.inl" )'
{
find ! -path "../flexlm/*" ! -path "../src/librsync/*" $pattern
find -path "../flexlm/*" $pattern
find -path "../src/librsync/*" $pattern
} | xargs etags -o ../TAGS --append发布于 2010-09-13 09:49:42
假设你可以运行多个find查询,并且你的项目可以通过一个查询找到你自己的源文件,并且可以通过其他查询找到任何库。
..。我也会这么做的。
发布于 2010-09-15 09:14:44
以下是通过组合上述答案并对其进行调整对我起作用的方法:
PATTERN := \( -not -regex '.*include/.*' \) \
-a \( -name '*.h' -o -name '*.hh' -o -name '*.y' \
-o -name '*.l' -o -name '*.cc' -o -name '*.cpp' \
-o -name '*.c' -o -name '*.inl' \)
.PHONY: tags
tags:
rm -f ../TAGS
find .. \
! -path "../src/librsync/*" \
! -path "../flexlm/*" \
$(PATTERN) | xargs etags -o ../TAGS --append
find .. -path "../src/librsync/*" \
$(PATTERN) | xargs etags -o ../TAGS --append
find .. -path "../flexlm/*" \
$(PATTERN) | xargs etags -o ../TAGS --appendhttps://stackoverflow.com/questions/3697457
复制相似问题