2

特定のディレクトリのエントリが最後にソートされるようにソートしたい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」で始まるエントリは、これらのパターンのいずれにも一致しないエントリの後に来る必要があります。

4

3 に答える 3

2

ブレースブロックに複数の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-13T03:33:44.570 に答える
1

複数の検索クエリを実行する余裕があり、1つのクエリで独自のソースファイルを検索し、他のクエリで任意のライブラリを検索できるようにプロジェクトを設定していると仮定します...

...それは私がすることです。

于 2010-09-13T01:49:42.020 に答える
0

上記の答えを組み合わせて微調整することで、私にとってうまくいったことは次のとおりです。

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
于 2010-09-15T01:14:44.220 に答える