在纯Ruby中删除目录中所有文件的安全有效方法是什么?我写
Dir.foreach(dir_path) {|f| File.delete(f) if f != '.' && f != '..'}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个No such file or directory错误.
谢谢.
Mar*_*her 69
怎么样FileUtils.rm_rf("#{dir_path}/.", secure: true)?
Myr*_*avN 22
FileUtils.rm_rf Dir.glob("#{dir_path}/*") if dir_path.present?
Run Code Online (Sandbox Code Playgroud)
sar*_*old 13
您可能会收到该错误,因为您当前的工作目录不匹配dir_path- File.delete(f)正在给出文件的文件名dir_path.(我希望你当前工作目录中没有任何重要文件,目录中的名称相同dir_path.)
您需要使用File.join(dir_path, f)构造要删除的文件名.您还需要弄清楚如何处理目录:
Dir.foreach(dir_path) do |f|
fn = File.join(dir_path, f)
File.delete(fn) if f != '.' && f != '..'
end
Errno::EISDIR: Is a directory - /tmp/testing/blubber
from (irb):10:in `delete'
from (irb):10
from (irb):10:in `foreach'
from (irb):10
from :0
Run Code Online (Sandbox Code Playgroud)
每个人都建议rm_rf,但更安全的方法是使用rm_f,这是一个别名rm force: true.
FileUtils.rm_f Dir.glob("#{dir_path}/*")
Run Code Online (Sandbox Code Playgroud)
此方法不会删除目录,它只会删除文件:http://ruby-doc.org/stdlib-2.2.0/libdoc/fileutils/rdoc/FileUtils.html#method-c-rm