risultato così come trovare sorta che i percorsi che iniziano con uno di una serie di modelli sono ordinati lo scorso
Domanda
Ho un comando find che vorrei ordinare in modo tale che le voci per alcune directory sono ordinati scorso. La ragione è che questa lista è da passare al etags per creare una tabella tag e vorrei alcune directory strumento di terze parti di essere, dopo tutto il codice che ho attivamente di modifica.
Qualcuno può suggerire un buon modo semplice per ordinare l'elenco come un cambiamento alla mia regola di makefile? Ecco la regola corrente:
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
Per esempio, le voci che iniziano "../flexlm/" o "../src/librsync" dovrebbe venire dopo le voci che non corrispondono a uno di questi modelli.
Soluzione
Inserire più comandi find
in un blocco tutore e tubo che in 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
Altri suggerimenti
Bene supponendo che si può permettere di eseguire più query trovare e avere il vostro progetto impostato in modo tale che sia possibile trovare i propri file di origine con una query e le librerie con altre domande ...
... che sarebbe quello che avrei fatto.
Ecco che cosa ha funzionato per me combinando le risposte di cui sopra e li tweaking:
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