【问题标题】:Ruby Deleting subdirectories that contain only a specific directoryRuby 删除仅包含特定目录的子目录
【发布时间】:2009-04-14 05:22:08
【问题描述】:

我需要删除一堆只包含其他目录的子目录,以及“.svn”目录。

如果你把它看成一棵树,“叶子”只包含“.svn”目录,所以应该可以删除叶子,然后退一步,删除新叶子等等。

我认为这段代码应该做到这一点,但我被困在“某物”中应该放什么。

Find.find('./com/') do |path|
    if File.basename(path) == 'something'
        FileUtils.remove_dir(path, true)
        Find.prune
    end
end

有什么建议吗?

【问题讨论】:

    标签: ruby file-io directory


    【解决方案1】:

    这个考虑了新的叶子(sort.reverse for entries意味着/a/b/.svn在/a/b之前处理;因此如果/a/b为空,它将被删除并且大小

    require 'fileutils'
    
    def delete_leaves(dirname)
        Dir.glob(dirname+"/**/",File::FNM_DOTMATCH).sort.reverse.each do |d|
            FileUtils.rm_rf(d) if d.match(/.svn/) or Dir.glob(d+"/*",File::FNM_DOTMATCH).size<=2  
        end  
    end
    delete_leaves(ARGV[0])
    

    【讨论】:

      【解决方案2】:

      这可以完成工作......但是它没有考虑到它自己的运行可能会产生新的叶子

      #!/usr/bin/env ruby
      
      require 'fileutils'
      
      def remove_leaves(dir=".")
        Dir.chdir(dir) do 
          entries=Dir.entries(Dir.pwd).reject { |e| e=="." or e==".."}
          if entries.size == 1 and entries.first == ".svn"
            puts "Removing #{Dir.pwd}"
            FileUtils.rm_rf(Dir.pwd)
          else
            entries.each do |e|
              if File.directory? e
                remove_leaves(e)
              end
            end
          end
        end
      end
      
      remove_leaves
      

      【讨论】:

        猜你喜欢
        • 2023-01-04
        • 2014-09-03
        • 1970-01-01
        • 2012-06-14
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多