hey,
why does this work…
cylc clean foo/run{1,2,3}
… but this doesn’t?..
cylc clean foo/run[4-6]
WARNING - No workflows matching u-cy886/[4-6]
thanks,
jonny
hey,
why does this work…
cylc clean foo/run{1,2,3}
… but this doesn’t?..
cylc clean foo/run[4-6]
WARNING - No workflows matching u-cy886/[4-6]
thanks,
jonny
That’s down to your bash shell.
You have not quoted the patterns to protect them shell interpretation before cylc clean sees the command line. See cylc clean --help: quote glob patterns, and {...} is not given as a valid pattern (different programs, such as bash vs the Python glob library vs the Python regex library support different kinds of patterns).
This works by sheer luck - bash expands that to foo/run1 foo/run2 foo/run3 without checking first that those files exist (in your current directory not the Cylc run directory!). So the cylc clean command gets a list of files that happen to be valid, rather than looking for all files that match the pattern.
To see this:
$ echo junk{1,2,3}
junk1 junk2 junk3 # expanded, but these files don't exist
By contrast bash does not expand foo/run[4-6] unless matching files exist (in your current directory).
$ echo junk[1-3]
junk[1-3] # not expanded
$ touch junk1 junk2 junk3 junk4
$ echo junk[1-3]
junk1 junk2 junk3 # now it is!
So in this case cylc clean sees the original pattern even though it’s not protected by quotes.
My local tests just now show that works though (i.e. [1-3] ranges are valid for cylc clean) … I’ll just check on the HPC…
[UPDATE] yes cylc clean foo/run[4-6] works there too, perhaps you made a typo in that command line?
However, you should use quotes just in case you ever have a foo/run3 in your current working directory (in which case bash will expand it before cylc clean gets it):
$ cylc clean "foo/run[4-6]"
brilliant, thanks for the detailed answer!