1

有谁知道如何使用 Ruby 删除目录中的所有文件。我的脚本在没有隐藏文件时运行良好,但当有(即 .svn 文件)时,我无法删除它们,并且 Ruby 会引发 Errno::ENOTEMPTY 错误。我怎么做 ?

4

5 回答 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 回答