Chuyển tới nội dung chính

Tìm tệp hoặc thư mục (file.find)

Khai báo

list = file.find(pattern)

Tham số

  • pattern
    Kiểu bảng hoặc chuỗi.

Giá trị trả về

  • list
    Kiểu mảng. Danh sách tên tệp khớp.

Mô tả

Tìm tệp hoặc thư mục bằng chế độ ký tự đại diện hoặc so khớp chính xác của Lua, rồi trả về các tên tệp khớp.
Nếu pattern là chuỗi, chế độ ký tự đại diện được sử dụng. Chỉ hỗ trợ ba dạng: *, ?, [ ... ].
Nếu pattern là bảng, chế độ so khớp chính xác của Lua được sử dụng.
Khả dụng trên các phiên bản sau 20250416.

Ví dụ

Chế độ ký tự đại diện đơn giản

-- Chế độ ký tự đại diện đơn giản chỉ hỗ trợ ba dạng: * ? [...]
-- * khớp với số lượng ký tự bất kỳ (kể cả 0)
-- ? khớp chính xác một ký tự bất kỳ
-- [...] khớp một ký tự trong ngoặc, ví dụ [abc]haha.txt khớp ahaha.txt, bhaha.txt, chaha.txt
-- [!...] khớp một ký tự không nằm trong ngoặc, ví dụ [!abc]haha.txt không khớp ahaha.txt/bhaha.txt/chaha.txt nhưng khớp xhaha.txt
local results = file.find("/private/var/mobile/Containers/Shared/AppGroup/*/Library/Preferences/*.plist")

Chế độ mẫu bảng chính xác

-- So khớp mẫu Lua chính xác bằng một bảng
-- Chuỗi ký tự được dùng nguyên trạng; có thể dùng hàm trả về boolean để kiểm tra từng đoạn
local results = file.find{ --<--- lưu ý dấu ngoặc nhọn
"/private/var/mobile/Containers/Shared/AppGroup/", -- chuỗi ký tự, không phải mẫu
function(s) return s:match("^[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+$") end, -- hàm khớp đoạn này
"/Library/Preferences/",
function(s) return s:match("%.plist$") end, -- hàm khớp đoạn này
}
-- Cũng có thể bọc một chuỗi trong bảng để biến nó thành đoạn so khớp mẫu
local results = file.find{ --<--- lưu ý dấu ngoặc nhọn
"/private/var/mobile/Containers/Shared/AppGroup/", -- chuỗi ký tự
{"^[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+%-[A-F0-9]+$"}, -- chuỗi mẫu được bọc trong bảng
"/Library/Preferences/", -- chuỗi ký tự
{"%.plist$"}, -- chuỗi mẫu được bọc trong bảng
}