Wie Art zu finden, so führt, dass Pfade mit einem aus einer Reihe von Mustern letzten beginnen, sortieren

StackOverflow https://stackoverflow.com/questions/3697457

Frage

Ich habe einen Befehl find, dass ich möchte so sortieren, dass die Einträge für bestimmte Verzeichnisse sortiert letzte. Der Grund dafür ist, dass diese Liste zu etags weitergegeben werden soll, eine Tags-Tabelle zu erstellen, und ich würde bestimmte Verzeichnisse Drittanbieter-Tool wie der Code, nachdem alle zu sein, die ich aktiv bearbeiten.

Kann jemand vorschlagen, eine gute einfache Art und Weise in die Liste als eine Änderung meiner Make-Datei Regel zu sortieren? Hier ist die aktuelle Regel:

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

Zum Beispiel Einträge, die „../flexlm/“ oder „../src/librsync“ beginnen sollte nach Einträgen kommen, die eines dieser Muster stimmen nicht überein.

War es hilfreich?

Lösung

Setzen mehrere find Befehle in einem Doppelpack Block und Rohr, das 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

Andere Tipps

Nun vorausgesetzt, Sie sich leisten können, mehrere Suchabfragen ausführen, und Sie haben Ihr Projekt so eingerichtet, dass es möglich ist, Ihre eigenen Quelldateien mit einer Abfrage und alle Bibliotheken mit anderen Abfragen ...

finden

... Das wäre was ich tun würde.

Hier ist, was für mich gearbeitet, indem sie die oben genannten Antworten kombiniert und zwicken sie:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top