Excluir arquivos ocultos em Ruby
-
20-09-2019 - |
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 ?
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) }"