lua 如何获取指定路径下的所有文件夹
Lua编程语言轻量级且小巧,可用io.popen执行系统命令获取指定路径下所有文件夹:在Windows系统下使用dir/b/s命令,在Unix系统下使用find-typef命令。然而官方更推荐使用lfs库进行递归遍历,通过lfs.dir和lfs.attributes函数筛选目录,此法避免系统命令依赖,代码简洁且跨平台效果更佳。
lua入门介绍
一.lua介绍
Lua 这个名字,在编程语言圈子里并不算陌生。它轻量、小巧,底层用标准C编写,源代码开放——设计初衷就是为了嵌入到应用程序中,给应用提供灵活扩展的能力。说白了,它就像一块随时能塞进其他软件里的“积木”,不用大动干戈,就能让宿主程序拥有脚本化的定制空间。

二.Lua 特性
轻量级
- 编译后只有一百多KB,跟个小饼干似的,轻轻松松就能嵌入到其他程序里。因为用标准C写,跨平台也毫无压力。
可扩展
- Lua 的扩展机制非常友好。宿主语言(通常是C/C++)可以把功能暴露出来,Lua 拿来就用,就像这些功能天生就是语言自带的。这种“借力”的设计,让Lua既保持精简,又能灵活调用底层能力。
其他特性
- 1. 支持面向过程编程和函数式编程,两种范式随意切换;
- 2. 自动内存管理,省去手动释放的烦恼;唯一的内置数据结构是表(table),但别小看它——数组、哈希表、集合、对象,全都能靠它实现;
- 3. 内置模式匹配;闭包(closure)是一等公民;函数本身也可以当作值来传递;还有协同程序(coroutine)提供轻量级的多线程支持(注意,不是操作系统线程);
- 4. 利用闭包和table,能轻松实现面向对象的核心机制:数据抽象、虚函数、继承、重载,全都不在话下。
三、应用场景
- 游戏开发(比如魔兽世界的插件就是Lua写的)
- 独立应用脚本
- Web应用脚本
- 扩展和数据库插件,例如MySQL Proxy和MySQL WorkBench
- 安全系统,如入侵检测
可以说,只要是需要嵌入脚本、灵活定制的场景,Lua 几乎都能胜任。
lua 获取指定路径下的所有文件夹
一、io.popen 函数获取
io.popen 是 Lua 里一个很实用的函数——它允许你执行一条系统命令,并把命令的输出当文件流来逐行读取。如果你想在 Windows 下获取某个文件夹里所有的文件(包括子目录),直接用 dir 命令就行,然后通过 io.popen 捕获结果。
-- 在 Lua 中调用 dir 命令并获取输出
local handle = io.popen('dir /b /s "C:\path\to\your\folder\"')
local files = {}
for file in handle:lines() do
files[#files + 1] = file
end
handle:close()
-- 现在 'files' 数组包含了文件夹下所有文件的完整路径
这里 /b 表示只显示文件名(简洁格式),/s 表示递归所有子目录。记得把 "C:\path\to\your\folder\" 换成你要查的实际路径。
如果你在 Unix/Linux 系统下工作,那就要换成 ls 或 find 了:
-- 在 Unix/Linux 系统中获取文件夹及其子文件夹下的所有文件
local handle = io.popen('find "path/to/your/folder/" -type f')
-- ... 同样的处理逻辑 ...
find 命令中的 -type f 表示只找普通文件,排除目录和其他类型。
二、使用lfs(LuaFileSystem)库来获取
如果不想依赖系统命令,更推荐用 Lua 原生的文件系统库——lfs。下面是一个递归遍历所有子文件夹的例子:
local lfs = require "lfs"
function listFolders(path)
local folders = {}
local attr = lfs.attributes(path)
if attr.mode == "directory" then
table.insert(folders, path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'/'..file
local attr = lfs.attributes(f)
if attr.mode == "directory" then
listFolders(f)
end
end
end
end
return folders
end
-- 使用示例
local path = "/your/specified/path"
local folders = listFolders(path)
for _, folder in ipairs(folders) do
print(folder)
end
安装 lfs 非常简单,用 LuaRocks 一行命令搞定:
luarocks install luafilesystem
这个函数会输出指定路径下所有文件夹的完整路径。如果你只想要直接子文件夹(不递归),把循环里的 listFolders(f) 去掉就行了。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















