ClearCase: Find files having exactly one specific label and not more

clearcase, cleartool, label

Solution

Assuming LBL_A is the (only) label you want running

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

should give

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

as output which you then can check in your perl script or filter through `sed -n 's/\(.*\): (LBL_A)/\1/p'` (assuming no colons in filenames).

Update: As VonC correctly points out, the command above will fail for files with spaces in. To handle that run as:

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

which will translate newlines into ascii null and then have xargs use that as delimiter.

Problem

I'd like to find files in ClearCase that are labeled with a specific label but that do not have any other labels set. For example, if I have files labeled like this: ``` file1 LBL_A, LBL_B file2 LBL_A ``` I'd like to have a query that gives me just file2 and not file1. Is there a way to do this with cleartool find? If this is not possible to do with a single query, I'd also be happy for any ideas how to do this in several steps (I'll be calling cleartool from a perl script, so it will be easy to save lists of files temporarily and run further commands on them). Thanks a lot in advance! Jan

Original source