首页 > 解决方案 > 是否有像 `seq` 这样的命令,它对标准输出执行完整的类似 bash 的大括号扩展?

问题描述

在 Bash 中,对嵌套目录树使用大括号扩展通常很方便,例如

mkdir -p {foo,bar}/baz{0..9}

这一直有效,直到扩展对于单个 ARGV 阵列来说太大。一个方便的替代方案是command-x,它类似于seq但接受与 bash 相同的大括号扩展,例如

command-x "{a..z}/{a..z}/{a..z}" | xargs mkdir -p
command-x "{a..z}/{a..z}/{a..z}" | parallel -m mkdir -p

在我重新发明轮子之前确实command-x存在吗?

到目前为止,我发现的最接近的是作为库的实现(例如https://pypi.org/project/bracex/https://pypi.org/project/braceexpand/https://github.com/micromatch/大括号)。如果没有任何结果,我可能会为其中一个 Python 接口提供 CLI 接口。

标签: bashbrace-expansion

解决方案


“需要适应 argv”限制仅适用于外部命令,不适用于 shell 内置命令。

因此,内置的 shellprintf适合以下用途:

printf '%s\n' {a..z}/{a..z}/{a..z} | xargs -d $'\n' mkdir -p --

...或者,更好的是,使用printf '%s\0'xargs -0传递所有可能的参数(和所有可能的文件名),一个包含带有文字换行符的内容的集合。


推荐阅读