有没有人知道如何使用Ruby删除目录中的所有文件。当没有隐藏文件时,我的脚本运行良好但是当有(即.svn文件)时我无法删除它们并且Ruby引发了Errno :: ENOTEMPTY错误。 我该怎么做?
答案 0 :(得分:2)
.svn不是文件,它是一个目录。
在FileUtils中查看remove_dir。
答案 1 :(得分:2)
如果你特别想摆脱你的svn文件,这里有一个脚本可以做到这一点而不会伤害你的其他文件:
require 'fileutils'
directories = Dir.glob(File.join('**','.svn'))
directories.each do |dir|
FileUtils.rm_rf dir
end
只需在您的基本svn目录中运行该脚本即可(如果您使用的是asp.net hack,只需将.svn更改为_svn)。
无论如何,请查看Dir.glob;它可以帮助你完成任务。
答案 2 :(得分:1)
它可能与.svn被隐藏的事实无关。该错误表明您正在尝试删除非空目录。在删除目录之前,需要删除目录中的所有文件。
答案 3 :(得分:1)
是的,您可以使用FileUtils.remove_dir path
删除(隐藏)目录。
我碰巧写了一个脚本来递归删除目录中的所有.svn文件。希望能帮助到你。
#!/usr/bin/ruby
require 'fileutils'
def svnC dir
d = Dir.new(dir)
d.each do |f|
next if f.eql?(".") or f.eql?("..")
#if f is directory , call svnC on it
path = dir + "/" + "#{f}"
if File.stat(path).directory?
if f.eql?(".svn")
FileUtils.remove_dir path
else
svnC path
end
end
end
end
svnC FileUtils.pwd
答案 4 :(得分:0)
正如@evan所说,你可以做到
require 'fileutils'
Dir.glob('**/.svn').each {|dir| FileUtils.rm_rf(dir) }
或者你可以把它变成一个班轮,然后从命令行执行它
ruby -e "require 'fileutils'; Dir.glob('**/.svn').each {|dir| FileUtils.rm_rf(dir) }"