有谁知道如何使用 Ruby 删除目录中的所有文件。我的脚本在没有隐藏文件时运行良好,但当有(即 .svn 文件)时,我无法删除它们,并且 Ruby 会引发 Errno::ENOTEMPTY 错误。我怎么做 ?
问问题
2451 次
5 回答
2
.svn 不是文件,它是一个目录。
查看FileUtils 中的remove_dir。
于 2009-10-12T09:14:27.357 回答
2
如果您特别想摆脱您的 svn 文件,这里有一个脚本可以做到这一点,而不会损害您的其余文件:
require 'fileutils'
directories = Dir.glob(File.join('**','.svn'))
directories.each do |dir|
FileUtils.rm_rf dir
end
只需在您的基本 svn 目录中运行脚本,这就是它的全部内容(如果您在使用 asp.net hack 的 Windows 上,只需将 .svn 更改为 _svn)。
无论如何,请查找 Dir.glob;它应该可以帮助您完成任务。
于 2009-10-13T14:29:50.207 回答
1
它可能与 .svn 被隐藏的事实无关。该错误表明您正在尝试删除非空目录。您需要先删除目录中的所有文件,然后才能删除目录。
于 2009-10-12T09:17:03.247 回答
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
于 2009-10-12T09:44:41.330 回答
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) }"
于 2010-10-07T08:59:28.937 回答