Lua - 删除非空目录

我正在尝试在 Lua 中删除非空目录,但没有成功,

我尝试了以下方法:

os.remove(path_to_dir)

并收到错误消息:Directory not empty 39 当39是path_to_dir中文件的数量时

我还尝试了:

require ('lfs')
lfs.rmdir(path_to_dir)

并收到错误消息:Directory not empty'

值得一提的是,我对path_to_dir进行了 chmod -R a+rX * 操作

感谢您的帮助。

点赞
用户1442917
用户1442917

你可以遵循 @EgorSkriptunoff 的建议,使用操作系统特定的命令来删除非空目录,或者使用 lfs 获取文件/子目录列表(例如,可以参考 这个 SO 回答),然后逐个使用 os.remove 删除。

2016-06-15 16:54:07
用户2328287
用户2328287

使用 path 函数库,你可以进行以下操作:

function rmdir(p)
  path.each(path.join(p,"*"), function(P)
    path.remove(P)
  end,{
    param = "f";   -- 请求完整的路径
    delay = true;   -- 使用目录的快照
    recurse = true; -- 包括子目录
    reverse = true; -- 子目录优先
  })
  path.remove(p)
end
2016-06-15 17:35:06
用户4984564
用户4984564

根据您的操作系统,您可以执行以下操作:

os.execute("rm --recursive " .. path_to_directory)

(此示例适用于Linux)

2016-06-15 22:38:49
用户1244510
用户1244510

使用 lua lfs,你可以实现一个递归函数实现此功能。

local lfs = require('lfs')

local deletedir
deletedir = function(dir)
    for file in lfs.dir(dir) do
        local file_path = dir..'/'..file
        if file ~= "." and file ~= ".." then
            if lfs.attributes(file_path, 'mode') == 'file' then
                os.remove(file_path)
                print('remove file',file_path)
            elseif lfs.attributes(file_path, 'mode') == 'directory' then
                print('dir', file_path)
                deletedir(file_path)
            end
        end
    end
    lfs.rmdir(dir)
    print('remove dir',dir)
end

deletedir('tmp')
2017-04-14 08:12:56