删除Ruby中的隐藏文件

时间:2009-10-12 09:07:20

标签: ruby file delete-file

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

5 个答案:

答案 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) }"