我有一种情况,我不知道文件的完整名称,但我需要搜索它以查看它是否存在。我不知道的文件名部分是名称末尾的序列号。例如,文件名如下所示:
我的文件.1234567890.12.xff
“.12”部分是我不知道的。但是,我只需要知道是否存在以“myfile.1234567890”开头并以“.xff”结尾的文件。
我将如何在 lua 中实现这一点?谢谢。
我有一种情况,我不知道文件的完整名称,但我需要搜索它以查看它是否存在。我不知道的文件名部分是名称末尾的序列号。例如,文件名如下所示:
我的文件.1234567890.12.xff
“.12”部分是我不知道的。但是,我只需要知道是否存在以“myfile.1234567890”开头并以“.xff”结尾的文件。
我将如何在 lua 中实现这一点?谢谢。
适用于 Windows 的版本。
没有外部库。
local function recursive_search(path, OS_filemask, filename_pattern, search_for_dirs, only_top_level)
path = path:gsub('/', '\\'):gsub('\\*$', '\\', 1)
OS_filemask = OS_filemask or '*.*'
filename_pattern = filename_pattern or '.*'
local arr = {}
local pipe = io.popen((search_for_dirs and 'dir /b/ad "' or 'dir /b/a-d "')..path..OS_filemask..'" 2> nul')
for f in pipe:lines() do
if f:lower():match('^'..filename_pattern..'$') then
table.insert(arr, path..f)
end
end
pipe:close()
if not only_top_level then
for _, path in ipairs(recursive_search(path, nil, nil, true, true)) do
for _, f in ipairs(recursive_search(path, OS_filemask, filename_pattern, search_for_dirs)) do
table.insert(arr, f)
end
end
end
return arr
end
-- Find all number-named JPEG picures in C:\Games
-- OS filemask can't filter it properly, use Lua pattern to restrict search conditions
for _, f in ipairs(recursive_search('C:\\Games', '*.jp*g', '%d+%.jpe?g')) do
print(f)
end
-- Find all folders in C:\WINDOWS with 32 in its name
-- OS filemask is enough here
for _, f in ipairs(recursive_search('C:\\WINDOWS', '*32*', nil, true)) do
print(f)
end
-- myfile.1234567890.12.xff
for _, f in ipairs(recursive_search('C:\\', 'myfile.1234567890.*.xff', 'myfile%.1234567890%.%d+%.xff')) do
print(f)
end
您可以在此链接中找到 Lua 中 glob 函数的实现。但是您可以遍历文件夹中所有文件的列表,并根据您的模式检查它们。您可以使用LuaFileSystem lfs.dir()来获取列表。