ClearCase:العثور على الملفات بعد واحد بالضبط محددة التسمية و لا أكثر

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

  •  10-07-2019
  •  | 
  •  

سؤال

أود أن العثور على الملفات في ClearCase التي تحمل تصنيف معين ولكن هذا لم يكن لديك أي تسميات أخرى مجموعة.

على سبيل المثال, إذا كان لدي ملفات وصفت مثل هذا:

file1 LBL_A, LBL_B
file2 LBL_A

أود أن يكون استعلام الذي يعطيني فقط file2 و لا file1.

هل هناك طريقة للقيام بذلك مع cleartool تجد ؟ إذا كان هذا لا يمكن أن تفعل مع استعلام واحد ، أود أيضا أن تكون سعيدة ل أي فكرة عن كيفية القيام بذلك في عدة خطوات (سأتصل cleartool من perl, لذلك سوف يكون من السهل حفظ قوائم من الملفات مؤقتا وتشغيل المزيد من الأوامر عليها).

شكرا جزيلا مقدما!

يناير

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

المحلول

على افتراض LBL_A هو (فقط) التسمية كنت تريد تشغيل

cleartool find /some/dir -version 'lbtype(LBL_A)' -print | xargs cleartool describe -fmt "%n: %l"

يجب أن تعطي

file1: (LBL_A, LBL_B)
file2: (LBL_A)

كما الناتج الذي ثم يمكن أن تحقق في perl أو مرشح من خلال sed -n 's/\(.*\): (LBL_A)/\1/p' (على افتراض أي نقطتين في أسماء الملفات).

تحديث:كما VonC بشكل صحيح ، الأمر أعلاه سوف تفشل الملفات ذات المساحات.إلى التعامل مع هذا تشغيل:

cleartool find ... -print | tr '\012' '\000' | xargs -0 cleartool ....

والتي سوف تترجم أسطر في ascii فارغة ومن ثم يكون xargs واستخدام محدد.

نصائح أخرى

يمكنك القيام بذلك مباشرة دون الحاجة إلى الأنابيب:

cleartool find . -ver "lbtype(LBL_A) && !lbtype(LBL_B)" -print

hlovdal الجواب يوضح أنه في هذه الحالة ، عليك أن تجد المزيد من العناصر ، ثم تصفية لهم (على الرغم من كل ClearCase تجد الميزات).

ملاحظة:

 cleartool find . -type f -element 'lbtype_sub(LBL_A)' -print

يمكن أن تعطيك مباشرة عناصر (وليس النسخة التي قد لا تكون مثيرة للاهتمام في هذه الحالة).يمكنك العثور على نسخة مع -version و شكل التوجيه كما هو موضح أدناه.

مع مساعدة من fmt_ccase, يمكنك خياط الإخراج للحصول على بالضبط ما perl سوف تحتاج إلى الذهاب على:

 cleartool find . -type f -element 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%En %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","
  • -fmt "%En %l\n" سيتم عرض المسار الكامل عنصر (بدلا من الإصدار:/أ/ب/myFile@@/الرئيسية/myVersion) => /a/b/myFile'. the ' ` ضمان نتيجة واحدة في كل سطر.
  • -version و -fmt "%n %l\n" عرض الإصدار
  • \"$CLEARCASE_XPN\":علامات الاقتباس المزدوجة arount الموسعة طريق إصدار كفالة الملف مع مسافات في اسم لا تزال تعمل.
  • grep -v ",":إذا كان هناك أي فاصلة ، التي تعني "أكثر من علامة واحدة"
  • %Cl:تجنب عرض كل قائمة التسميات.على أي حال, إذا كان هناك أكثر من واحد كنت لا ترغب!

لذا ، من أجل إيجاد بالضبط الإصدار:

 cleartool find . -type f -version 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%n %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","|awk '{sub(/ \(.*/,"");print}'

ملاحظة:
أعلاه يعمل مع unix الجملة.ويندوز جملة ليكون:

cleartool find . -type f -element "lbtype(LBL_A)" -exec "cleartool describe -fmt \"%n %Cl\n\" \"%CLEARCASE_XPN%\"" | grep -v "," | gawk "{gsub(/ \(.*,"");print}"

, الذي من شأنه أن قائمة نسخة من الملفات مع واحد فقط (الصحيح) التسمية.

  • awk '{sub(/ \(.*/,"");print}' تحويل "myFile@@/main/myVersion (LBL_A)"في "myFile@@/الرئيسية/myVersion"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top