Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中删除目录是一种多么安全和简单的方法?_Ruby - Fatal编程技术网

在Ruby中删除目录是一种多么安全和简单的方法?

在Ruby中删除目录是一种多么安全和简单的方法?,ruby,Ruby,我想删除一个可能包含或不包含文件或其他目录的目录。查找我找到的Ruby文档,但它不会删除非空目录。有没有一个方便的方法让我这么做?或者我需要编写一个递归方法来检查目录下的所有内容吗?最懒的方法是: def delete_all(path) `rm -rf "#{path}"` end 纯Ruby方式: 需要“fileutils” FileUtils.rm_rf(“/directory/to/go”) 如果需要线程安全:(警告,更改工作目录) 如果有人在@ferventcoder com

我想删除一个可能包含或不包含文件或其他目录的目录。查找我找到的Ruby文档,但它不会删除非空目录。有没有一个方便的方法让我这么做?或者我需要编写一个递归方法来检查目录下的所有内容吗?

最懒的方法是:

def delete_all(path)
    `rm -rf "#{path}"`
end
纯Ruby方式:

需要“fileutils”

FileUtils.rm_rf(“/directory/to/go”)

如果需要线程安全:(警告,更改工作目录)


如果有人在@ferventcoder comment上寻找答案,则FileUtils.rm\u rf(“directory/to/go”,:secure=>true)

-


请注意,我发现在Windows和Ruby 1.9.3(至少)下,FileUtils.rm_rf将跟随链接(本例中为符号链接)并删除这些文件和文件夹。这是基于使用createSymbolicLink创建符号链接,然后针对符号链接所在的父目录运行FileUtils.rm_rf而发现的。不完全是预期的行为

–费文特编码器

最安全的方法是迭代路径并手动删除它

def rec_del(路径):

  • 如果路径是file call FileUtils.rm_rf-即使在windows中删除也是安全的
  • if dir调用dir.rmdir,对于空dir和dir symlink,这将成功。对于常规的非空目录,else将获得eNOTENTY
  • 迭代dir并为每个项调用rec_del
  • 现在再次调用Dir.rmdir,它将成功

  • 请注意,这些文档中包含一条警告:如果您未通过:secure as option to rm_rf,您可能会暴露一个漏洞。@BKewl关于这一点的参考?@alex0112:请参阅并注意,我发现在Windows和Ruby 1.9.3(至少)
    FileUtils中,rm_rf
    将跟随链接(本例中为符号链接)并删除这些文件和文件夹。这是基于使用
    createsymbolicinkw
    创建符号链接,然后针对符号链接所在的父目录运行
    FileUtils.rm\u rf
    发现的。不完全是预期的行为。有没有办法不删除符号链接的目标,而只删除链接文件本身?在Windows上不起作用。不必要地启动两个子流程(shell和
    rm
    本身)。只返回错误代码,而不是可能更详细的异常消息。(你可能想删除这个答案,@AnaBetts。)至少它可以在不需要ruby>=2.3.0的情况下工作。对于需要支持的不同操作系统变体,也可以实现类似的逻辑FiileUtils要求>=2.3.0,这不是所有平台上都可用的标准软件包,例如centos 7
    require 'fileutils'
    
    FileUtils.rm_rf(dir)