Pergunta

Alguém sabe como excluir todos os arquivos em um diretório com o Ruby. Meu script funciona bem quando não há arquivos ocultos, mas quando existem (ou seja, arquivos .svn), não posso excluí -los e Ruby levanta o erro Errno :: EnotEmpty. Como faço isso ?

Foi útil?

Solução

Se você deseja se livrar especificamente de seus arquivos SVN, aqui está um script que o fará sem prejudicar o restante de seus arquivos:

require 'fileutils'
directories = Dir.glob(File.join('**','.svn'))
directories.each do |dir|
    FileUtils.rm_rf dir
end

Basta executar o script no seu diretório Base SVN e é tudo o que existe (se você estiver no Windows com o hack do ASP.NET, basta alterar .svn para _svn).

Independentemente disso, procure o Dir.Glob; Deve ajudá -lo em sua missão.

Outras dicas

.svn não é um arquivo, é um diretório.

Verificação de saída remove_dir em fileutils.

Provavelmente não tem nada a ver com o fato de que .svn está oculto. O erro sugere que você está tentando excluir um diretório não vazio. Você precisa excluir todos os arquivos no diretório antes de excluir o diretório.

Sim, você pode excluir o diretório (Hiden) usando FileUtils.remove_dir path.

Fico feliz em apenas escrever um script para excluir todo o arquivo .svn no diretório recursivamente. Espero que ajude.

#!/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 

Como @evan disse que você pode fazer

require 'fileutils'
Dir.glob('**/.svn').each {|dir| FileUtils.rm_rf(dir) }

ou você pode fazer um revestimento único e apenas executá -lo da linha de comando

ruby -e "require 'fileutils'; Dir.glob('**/.svn').each {|dir| FileUtils.rm_rf(dir) }"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top