1


1

他のディレクトリと ".svn"ディレクトリだけを含むたくさんのサブディレクトリを削除する必要があります。

ツリーのように見れば、 "leaves"には ".svn"ディレクトリしか含まれていないので、リーフを削除してからレベルを上げたり、新しいリーフを削除したりできます

私はこのコードがそれをすべきだと思います、しかし、私は何を「何か」に入れるべきかについて立ち往生しています。

Find.find( './ com /')do | path | File.basename(path)== 'something'の場合FileUtils.remove_dir(path、true)Find.prune end end

助言がありますか?

2 Answer


2


これは新しいリーフを考慮に入れます(エントリのsort.reverseは/ a / bの前に/ a / b / .svnが処理されることを意味します;したがって/ a / bが空の場合、削除されサイズ⇐ 2 FNM_DOTMATCHでは、globは常に最低2つのエントリ( '。'と '..')を返すため)

'fileutils'が必要

def delete_leaves(dirname)Dir.glob(dirname "/**/",File::FNM_DOTMATCH)。 FileUtils.rm_rf(d)d.match(/。svn /)またはDir.glob(d "/*",File::FNM_DOTMATCH ).size<=2 end end delete_leaves(ARGV [0])の場合


0


これは仕事をするでしょう…​ ただし、それを考慮に入れていないため、独自の実行で新しいリーフが作成される可能性があります。

#!/ usr / bin / env ruby

'fileutils'が必要

def remove_leaves(dir = "。")Dir.chdir(dir)エントリを入力します。= Dir.entries(Dir.pwd).reject {| e | e == "。"またはentries.size == 1およびentries.first == ".svn"の場合には、e == ".."}を入力します。FileUtils.rm_rf(Dir.pwd) e | File.directoryの場合 e remove_leaves(e)エンドエンドエンドエンドエンド

remove_leaves