كيفية فرز البحث عن نتيجة بحيث يتم فرز المسارات التي تبدأ بإحدى مجموعة من الأنماط أخيرًا

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

سؤال

لديّ أمر تجد أرغب في فرزه بحيث يتم فرز الإدخالات لبعض الدلائل أخيرًا. والسبب هو أن هذه القائمة يجب أن يتم نقلها إلى 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" بعد الإدخالات التي لا تتطابق مع أحد هذه الأنماط.

هل كانت مفيدة؟

المحلول

ضع متعددة 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

نصائح أخرى

حسنًا ، على افتراض أنه يمكنك تشغيل استفسارات العثور على متعددة ، ولديك مشروعك تم إعداده بطريقة يمكن العثور على ملفات المصدر الخاصة بك مع استفسار واحد وأي مكتبات مع استفسارات أخرى ...

... سيكون هذا ما سأفعله.

إليكم ما نجح بالنسبة لي من خلال الجمع بين الإجابات المذكورة أعلاه وتبديلها:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top