我想要查找文件中明确案件都标有具体的标签,但是, 没有任何其他标签设置.

例如,如果我有标记的文件是这样的:

file1 LBL_A, LBL_B
file2 LBL_A

我想要查询这给了我只是文件2和不1.

有没有一种方法来这样做cleartool找到?如果这是不可能做到的与一个单一的查询,我也很高兴对于任何想法,如何做到这一点在几个步骤(我会打电话cleartool从perl脚本,所以这将是便于保存名单的文件暂时和运行进一步的命令)。

谢谢你提前!

Jan

有帮助吗?

解决方案

假设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 null,然后让xargs将其用作分隔符。

其他提示

您可以直接执行此操作而无需管道:

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

hlovdal的答案 说明的是,在这种情况下,你必须找到更多的元素比你的需要,然后过滤(尽管所有的 明确案件中找到的特征).

注:

 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" 将显示完整的路径 元素 (替代的版本://b/myFile@@/main/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语法。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"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top