Перейти к основному содержимому

Поиск файла или каталога (file.find)

Объявление

список_файлов = file.find(шаблон_совпадения)

Параметры

  • Шаблон совпадения
    Таблица | строка

Возвращаемое значение

  • Список файлов
    Таблица, список найденных имён файлов.

Описание

Ищет файлы или каталоги по шаблону с подстановочными знаками либо по точному шаблону Lua и возвращает список совпавших имён файлов.
Если шаблон совпадения — строка, используется шаблон с подстановочными знаками; поддерживаются только три знака: *, ? и [...].
Если шаблон совпадения — таблица, используется точное сопоставление Lua.
Функция доступна в версиях после 20250416.

Пример

Простой шаблон с подстановочными знаками

-- Простой шаблон с подстановочными знаками поддерживает только три базовых знака: * ? [...]
-- * означает совпадение с любым числом любых символов (в том числе с нулём символов)
-- ? означает совпадение с одним произвольным символом
-- [...] означает совпадение с одним произвольным символом в квадратных скобках; например, [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
-- Точное сопоставление строится из сегментов таблицы Lua: строка проверяется как литерал, а функция, возвращающая true/false, определяет допустимость сегмента
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$"}, -- Таблица с одной строкой обозначает сегмент, для которого нужно сопоставление по шаблону
}