Lua - 删除非空目录

时间:2016-06-15 12:32:32

标签: lua lua-table torch

我试图删除 Lua 中的非空目录,但没有成功,

我尝试了以下内容:

os.remove(path_to_dir)

收到错误:Directory not empty 39 当39是path_to_dir

中的文件数时

也尝试过:

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

并收到错误:目录不为空'

值得一提的是,我chmod -R a+rX *path_to_dir

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

您可以遵循@ EgorSkriptunoff的建议并使用特定于操作系统的命令来删除非空目录或使用lfs获取文件/子目录列表(例如,作为described in this SO answer)和使用os.remove逐个删除它们。

答案 1 :(得分:1)

使用path库可以

function rmdir(p)
  path.each(path.join(p,"*"), function(P)
    path.remove(P)
  end,{
    param = "f";   -- request full path
    delay = true;   -- use snapshot of directory
    recurse = true; -- include subdirs
    reverse = true; -- subdirs at first 
  })
  path.remove(p)
end

答案 2 :(得分:1)

根据您的操作系统,您可以这样做:

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

(这个例子是针对linux的)

答案 3 :(得分:0)

使用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')