Walk a directory/Recursively: Difference between revisions

→‎{{header|Lua}}: lfs solution
No edit summary
(→‎{{header|Lua}}: lfs solution)
Line 1,365:
 
=={{header|Lua}}==
Lua itself is extremely spartanic as it is meant for embedding. As lfs (LuaFileSystem) is about as standard an extension as it gets, we use that.
<lang Lua>local lfs = require("lfs")
 
-- This function takes two arguments:
-- - the directory to walk recursively;
-- - an optional function that takes a file name as argument, and returns a boolean.
function find(self, fn)
return coroutine.wrap(function()
for f in lfs.dir(self) do
if f ~= "." and f ~= ".." then
local _f = self .. "/" .. f
if not fn or fn(_f) then
coroutine.yield(_f)
end
if lfs.attributes(_f, "mode") == "directory" then
for n in find(_f, fn) do
coroutine.yield(n)
end
end
end
end
end)
end
 
-- Examples
-- List all files and directories
for f in find("directory") do
print(f)
end
 
-- List lua files
for f in find("directory", function(self) return self:match("%.lua$") end) do
print(f)
end
 
-- List directories
for f in find("directory", function(self) return "directory" == lfs.attributes(self, "mode") end) do
print(f)
end</lang>
 
Lua provides functions such as os.execute([command]) and io.popen(prog [, mode]). Below an example for Windows users having io.popen at their disposal. Mind you, it may pop-up a command window.
<lang Lua>-- Gets the output of given program as string
Anonymous user