Brace expansion in zsh - how to concatenate two lists for file selection?

99 Views Asked by At

In zsh, one can create an expression of {nx..ny}, for example to select files x to y inside a folder.

For example, {1..50} selects items, files, etc. from 1 to 50.

How can I concatenate two two brace expansions into one? Example: I would like to select {1..50} and {60..100} for one and the same output.

1

There are 1 best solutions below

1
Gairfowl On BEST ANSWER

You can nest brace expansions, so this will work:

> print {{1..50},{60..100}}
1 2 3 (lots of numbers) 49 50 60 61 (more numbers) 99 100

Brace expansions support lists as well as sequences, and can be included in strings:

> print -l file{A,B,WORD,{R..T}}.txt
fileA.txt
fileB.txt
fileWORD.txt
fileR.txt
fileS.txt
fileT.txt

Note that brace expansions are not glob patterns. The {n..m} expansion will include every value between the start and end values, regardless of whether a file exists by that name. For finding files in folders, the <-> glob expression will usually work better:

> touch 2 3 55 89
> ls -l <1-50> <60-100>
-rw-r--r--  1 me  grp  0 Feb 18 06:52 2
-rw-r--r--  1 me  grp  0 Feb 18 06:52 3
-rw-r--r--  1 me  grp  0 Feb 18 06:52 89