In Bash it is often convenient to use brace expansion to nested directory trees, e.g.
mkdir -p {foo,bar}/baz{0..9}
This works until the expansion is too big for a single ARGV array. A convenient alternative would be command-x
, which is like seq
but accepts the same brace expansions as bash, e.g.
command-x "{a..z}/{a..z}/{a..z}" | xargs mkdir -p
command-x "{a..z}/{a..z}/{a..z}" | parallel -m mkdir -p
Before I reinvent a wheel does command-x
exist?
The closest I've found so far are implementations as libraries (e.g. https://pypi.org/project/bracex/, https://pypi.org/project/braceexpand/, https://github.com/micromatch/braces). If nothing turns up I may offer a CLI interface to one of the Python ones.
The "needs to fit in argv" limitation only applies to external commands, not to shell builtins.
Thus, the shell builtin printf
is suited to purpose:
printf '%s\n' {a..z}/{a..z}/{a..z} | xargs -d $'\n' mkdir -p --
...or, better, use printf '%s\0'
and xargs -0
to pass through all possible arguments (and all possible filenames), a set which includes content with literal newlines.