Walk a directory/Recursively: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 1,309: | Line 1,309: | ||
/Users/xxx/music/albumx/trackx2.mp3 |
/Users/xxx/music/albumx/trackx2.mp3 |
||
/Users/xxx/music/albumy/tracky.mp3 ...</pre> |
/Users/xxx/music/albumy/tracky.mp3 ...</pre> |
||
=={{header|Lua}}== |
|||
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 |
|||
-- Note that io.popen is not available on all platforms |
|||
local function getOutput(prog) |
|||
local file = assert(io.popen(prog, "r")) |
|||
local output = assert(file:read("*a")) |
|||
file:close() |
|||
return output |
|||
end |
|||
-- Iterates files in given directory |
|||
local function files(directory, recursively) |
|||
-- Use windows" dir command |
|||
local directory = directory:gsub("/", "\\") |
|||
local filenames = getOutput(string.format("dir %s %s/B/A:A", directory, recursively and '/S' or '')) |
|||
-- Function to be called in "for filename in files(directory)" |
|||
return coroutine.wrap(function() |
|||
for filename in filenames:gmatch("([^\r\n]+)") do |
|||
coroutine.yield(filename) |
|||
end |
|||
end) |
|||
end |
|||
-- Walk "C:/Windows" looking for executables |
|||
local directory = "C:/Windows" |
|||
local pattern = ".*%.exe$" -- for finding executables |
|||
for filename in files(directory, true) do |
|||
if filename:match(pattern) then |
|||
print(filename) |
|||
end |
|||
end</lang> |
|||
=={{header|Mathematica}}== |
=={{header|Mathematica}}== |