在Ruby中删除目录的安全简便方法是什么?

时间:2009-03-04 02:09:59

标签: ruby

我想删除一个可能包含或不包含文件或其他目录的目录。查看Ruby文档,我发现Dir.rmdir但它不会删除非空目录。是否有一种方便的方法让我这样做?或者我是否需要编写递归方法来检查目录下的所有内容?

4 个答案:

答案 0 :(得分:49)

require 'fileutils'

FileUtils.rm_rf(dir)

答案 1 :(得分:4)

纯粹的Ruby方式:

要求'fileutils'

FileUtils.rm_rf( “/目录/到/去”)

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

FileUtils.rm_rf(“directory / to / go”,:secure => true)

答案 2 :(得分:0)

如果有人在@ferventcoder评论上寻找答案-

仅需注意一下,我发现在Windows和Ruby 1.9.3(至少)下,FileUtils.rm_rf将跟随链接(在这种情况下为符号链接),并删除这些文件和文件夹。通过使用CreateSymbolicLinkW创建符号链接,然后对符号链接所在的父目录运行FileUtils.rm_rf来发现此错误。

– ferventcoder

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

def rec_del(路径):

  1. 如果路径是文件调用FileUtils.rm_rf-即使在Windows中也可以安全删除
  2. 如果dir调用Dir.rmdir,它将成功执行空dir和dir符号链接。否则,对于常规非空目录,将获得ENOTEMPTY。
  3. 重复目录并为每个项目调用rec_del。
  4. 现在再次调用Dir.rmdir,它将成功

答案 3 :(得分:-3)

最懒的方式是:

def delete_all(path)
    `rm -rf "#{path}"`
end