- OpenTofu 语言
- 函数
- fileset
fileset
函数
fileset
根据路径和模式枚举一组普通文件名称。路径会自动从生成的的的文件名称集中移除,并且任何仍然包含路径分隔符的结果始终返回正斜杠 (/
) 作为路径分隔符,以实现跨系统的兼容性。
fileset(path, pattern)
支持的模式匹配
*
- 匹配任意非分隔符字符序列**
- 匹配任意字符序列,包括分隔符字符?
- 匹配任意单个非分隔符字符{alternative1,...}
- 如果逗号分隔的备选方案之一匹配,则匹配字符序列[CLASS]
- 匹配字符类中任意单个非分隔符字符(参见下文)[^CLASS]
- 匹配字符类之外的任意单个非分隔符字符(参见下文)
请注意,双星号 (**
) 必须单独作为路径组件出现。诸如 /path** 之类的模式无效,并且将被视为与 /path* 相同,但 /path*/** 应该可以达到预期的效果。
字符类支持以下内容
[abc]
- 匹配集合中的任意单个字符[a-z]
- 匹配范围内的任意单个字符
函数在配置解析期间而不是在应用时进行评估,因此此函数只能用于在 OpenTofu 执行任何操作之前已存在于磁盘上的文件。
示例
> fileset(path.module, "files/*.txt")
[
"files/hello.txt",
"files/world.txt",
]
> fileset(path.module, "files/{hello,world}.txt")
[
"files/hello.txt",
"files/world.txt",
]
> fileset("${path.module}/files", "*")
[
"hello.txt",
"world.txt",
]
> fileset("${path.module}/files", "**")
[
"hello.txt",
"world.txt",
"subdirectory/anotherfile.txt",
]
fileset
的一个常见用法是使用 for_each
元参数 为每个匹配的文件创建一个资源实例。
resource "example_thing" "example" {
for_each = fileset(path.module, "files/*")
# other configuration using each.value
}