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 ディレクトリでスクリプトを実行するだけです (Windows で asp.net ハックを使用している場合は、.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 に答える