ответ 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"
будет отображать полный путь к элементу (вместо версии: / a / b / myFile @@ / main / myVersion) => /a/b/myFile'. the '
\ n`, обеспечивая один результат на строку .
-version
и -fmt "%n %l\n"
будут отображать версию
\"$CLEARCASE_XPN\"
: двойные кавычки по расширенному пути найденной версии гарантируют, что файл с пробелами в его имени будет по-прежнему работать.
grep -v ","
: если есть запятая, это означает «более одного ярлыка»
%Cl
: не отображать список all . В любом случае, если их больше одного, вам это не интересно!
Итак, для нахождения точной версии :
cleartool find . -type f -version 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%n %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","|awk '{sub(/ \(.*/,"");print}'
Примечание:
Выше работает с синтаксисом Unix. Синтаксис Windows будет:
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 @@ / main / myVersion"