《无处不Ruby》系列之批量复制目录到指定文件夹
程序员文章站
2024-03-11 16:36:07
...
Attention:tar为目标路径,指src下面的目录结构将被复制到的地方
The Goal:在指定目录下创建和当前目录一样的文档结构,可以选择复制子目录结构或者不复制子目录结构。
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