如何使用Dir类删除非空目录?

时间:2011-05-16 09:56:27

标签: ruby

Dir.delete("/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh")  

导致此错误:

  

目录不为空 - /usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh

如果目录仍包含文件,如何删除目录?

3 个答案:

答案 0 :(得分:50)

Dir是不可能的(除了自己迭代目录或使用Dir.glob并删除所有内容之外)。

你应该使用

require 'fileutils'
FileUtils.rm_r "/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh"

答案 1 :(得分:6)

当您使用Dir.delete删除目录时,它还会在子目录中搜索文件。

Dir.delete("/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh")

如果目录不为空,则会引发Directory not empty错误。因为ruby有FiltUtils.rm_r方法,无论如何都会删除目录!

require 'fileutils'
FileUtils.rm_r "/usr/local/var/lib/trisul/CONTEXT0/meters/oper/SLICE.9stMxh"

答案 2 :(得分:0)

我直接使用bash system(*args)命令:

folder = "~/Downloads/remove/this/non/empty/folder"
system("rm -r #{folder}")

它不是特定的ruby,但由于bash在这种情况下更简单,我经常使用它来清理临时文件夹和文件。 rm命令只删除你给它的任何内容,-r标志告诉它在文件夹不为空的情况下递归删除文件。