`
CharlesCui
  • 浏览: 418855 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

《无处不Ruby》系列之批量复制目录到指定文件夹

阅读更多
Attention:tar为目标路径,指src下面的目录结构将被复制到的地方
The Goal:在指定目录下创建和当前目录一样的文档结构,可以选择复制子目录结构或者不复制子目录结构。

require 'rubygems'
require 'ruby-debug' 
require "find"

module Cz_dirtools

  def mkdirs_to(tar,src=Dir.getwd)
    #debugger
    if tar.class==NilClass then
      puts "PLZ input target directory name..."
      return 
    elsif !FileTest.directory?(tar)#如果tar不是一个目录
      puts ("Creating #{File.expand_path(tar)}")
      Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录
    end
    
    src=if FileTest.directory?(src) then
      src#如果src是一个目录名,则返回自身
      else
        File.dirname(src)#如果src为一个文件名,则返回该文件所在目录
      end
  #Dir.foreach可以复制目标路径第一层目录结构而不复制子目录
    #~ Dir.foreach(src) do |dir|
      #~ if FileTest.directory?(dir)  && dir!=tar && dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"."
        #~ #puts dir
        #~ begin
        #~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}")
        #~ rescue#如果该目录已存在则直接跳过否则创建该目录
        #~ end        
      #~ end
    #~ end
  #Find.find可以复制目标路径的完整目录结构,包括子目录
    dirs=Array.new
    Find.find(src) do |dir|
      unless !FileTest.directory?(dir)  || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"."
        dirs<<dir
      end
    end
    #puts dirs
    dirs.each do |dir|
        begin
        Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}")
        rescue#如果该目录已存在则直接跳过否则创建该目录    
        end
    end
  end

end
分享到:
评论
2 楼 CharlesCui 2008-03-24  
不是说了无处不Ruby么?
1 楼 qubic 2008-03-24  
可以写成批处理或者shell嘛,更简单

相关推荐

Global site tag (gtag.js) - Google Analytics