代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

如何对find结果进行排序,使以一组模式中的一个开始的路径最后排序

  •  2
  • WilliamKF  · 技术社区  · 14 年前

    我有一个查找命令,我想排序,使某些目录的条目排序最后。原因是这个列表将被传递给etags来创建一个tags表,我希望在所有我主动编辑的代码之后,有一些第三方工具目录。

    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”开头的条目应该位于与这些模式之一不匹配的条目之后。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Dennis Williamson    14 年前

    放置多个 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
    
        2
  •  1
  •   user268396    14 年前

    好吧,假设您可以运行多个find查询,并且您的项目的设置方式是这样的:可以用一个查询找到您自己的源文件,用其他查询找到任何库。。。

    ... 我会这么做的。

        3
  •  0
  •   WilliamKF    14 年前

    以下是结合上述答案并对其进行调整后对我有效的方法:

    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 --append