Удалить скрытые файлы в Ruby - PullRequest
       34

Удалить скрытые файлы в Ruby

1 голос
/ 12 октября 2009

Кто-нибудь знает, как удалить все файлы в каталоге с Ruby. Мой сценарий хорошо работает, когда нет скрытых файлов, но когда они есть (т.е. файлы .svn), я не могу их удалить, и Ruby вызывает ошибку Errno :: ENOTEMPTY. Как мне это сделать?

Ответы [ 5 ]

2 голосов
/ 13 октября 2009

Если вы специально хотите избавиться от файлов SVN, вот скрипт, который сделает это без ущерба для остальных ваших файлов:

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

Просто запустите скрипт в вашем базовом каталоге svn, и это все, что нужно (если вы работаете в Windows с хаком asp.net, просто измените .svn на _svn).

Независимо от того, посмотрите Dir.glob; это должно помочь вам в вашем квесте.

2 голосов
/ 12 октября 2009

.svn - это не файл, это каталог.

Извлечение remove_dir в FileUtils.

1 голос
/ 12 октября 2009

Да, вы можете удалить (скрыть) каталог, используя 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 
1 голос
/ 12 октября 2009

Вероятно, это не имеет ничего общего с тем, что .svn скрыт. Ошибка предполагает, что вы пытаетесь удалить не пустой каталог. Вам нужно удалить все файлы в каталоге, прежде чем вы сможете удалить каталог.

0 голосов
/ 07 октября 2010

Как сказал @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) }"
...