我想删除一个目录,该目录可能包含文件或其他目录。查看 Ruby 文档后,我发现 Dir.rmdir 不能删除非空目录。是否有便捷的方法可以让我做到这一点?或者我需要编写递归方法来检查目录下面的所有内容?
require 'fileutils'
FileUtils.rm_rf(dir)
纯 Ruby 方法:
需要引入 'fileutils' 库
FileUtils.rm_rf("/directory/to/go") 可以删除指定目录下的所有文件和子目录。
如果需要线程安全: (警告,会更改当前工作目录)
FileUtils.rm_rf("directory/to/go", :secure=>true) 可以删除指定目录下的所有文件和子目录,并确保在多线程环境下安全执行。
如果有人在寻找 @ferventcoder 评论中的答案 -
顺便提一下,我发现在 Windows 和 Ruby 1.9.3(至少如此)上,FileUtils.rm_rf 将会跟随链接(在这种情况下是符号链接)并删除那些文件和文件夹。这是由于创建 CreateSymbolicLinkW 符号链接,然后运行 FileUtils.rm_rf 删除包含符号链接的父目录而发现的。这不是完全符合预期的行为。
– ferventcoder
最安全的方法是迭代路径并手动删除它。
def rec_del(path):
最懒的方法是:
def delete_all(path)
`rm -rf "#{path}"`
end
rm
本身)。仅返回错误代码,而不是可能更详细的异常信息。(您可能需要删除此答案,@AnaBetts。) - toolforger
FileUtils.rm_rf
将遵循链接(在这种情况下是符号链接)并删除那些文件和文件夹。这是通过使用CreateSymbolicLinkW
创建符号链接,然后针对包含符号链接的父目录运行FileUtils.rm_rf
来发现的。这不是完全预期的行为。 - ferventcoder