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