跳到主要内容

查找文件或目录 (file.find)

声明

文件列表 = file.find(匹配模式)

参数

  • 匹配模式
    表型 | 文本型

返回值

  • 文件列表
    表型,返回找到的文件名列表

说明

使用通配符模式或 Lua 精确匹配搜索文件或目录,返回匹配的文件名列表。
如果 匹配模式 是字符串,则使用通配符模式匹配,通配符模式匹配仅支持 *、?、[...] 这三种通配符。
如果 匹配模式 是表,则使用 Lua 精确匹配。
这个函数在 20250416 以后的版本方可使用

示例

简单通配符模式

-- 简单通配符模式,仅支持 * ? [...] 三种基本通配符
-- * 表示匹配任意长度任意字符(长度也可以是 0)
-- ? 表示匹配单个任意字符
-- [...] 表示匹配单个中括号里的任意字符,例如 [abc]haha.txt 表示 ahaha.txt bhaha.txt chaha.txt 都匹配
-- [!...] 表示匹配单个非中括号里的任意字符,例如 [!abc]haha.txt 表示 ahaha.txt bhaha.txt chaha.txt 不匹配,其它单个字符例如 xhaha.txt 才能匹配
local results = file.find("/private/var/mobile/Containers/Shared/AppGroup/*/Library/Preferences/*.plist")

精确通配模式

-- 精确 Lua 模式匹配模式
-- 精确匹配使用 Lua 表分段构造匹配模式,字符串为字面量判断,模式匹配可以使用返回真假的函数来决定当前分段是否有效
local results = file.find{ --<--- 注意这里是大括号
"/private/var/mobile/Containers/Shared/AppGroup/", -- 普通字符串不需要模式匹配
function(s) return s:match("^[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+$") end, -- 使用函数匹配当前分段
"/Library/Preferences/",
function(s) return s:match("%.plist$") end, -- 使用函数匹配当前分段
}
-- 精确 Lua 模式匹配模式也可使用大括号包裹单个字符串以构造一个简易模式匹配函数
local results = file.find{ --<--- 注意这里是大括号
"/private/var/mobile/Containers/Shared/AppGroup/", -- 普通字符串不需要模式匹配
{"^[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+$"}, -- 使用表包裹单个字符串表示这是一个需要使用模式匹配的分段
"/Library/Preferences/", -- 普通字符串不需要模式匹配
{"%.plist$"}, -- 使用表包裹单个字符串表示这是一个需要使用模式匹配的分段
}