跳至主要内容

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
}