Копирование файлов с сохранением структуры каталогов с граблями

моя цель-скопировать набор файлов, заданных шаблоном, в целевой каталог. Файлы в исходный каталог может иметь подкаталоги.

пробовал:

cp_r(Dir.glob('**/*.html'), @target_dir):

и

cp_r(FileList['**/*.html'], @target_dir):

но ни одна из них не работает.

это работает только когда я делаю что-то вроде:

cp_r(Dir['.'], @target_dir):

но мне нужно скопировать только *.html-файлы не что иное.

мне нужно то, что

cp --parents

3 ответов


Если вы хотите чистый Ruby, вы можете сделать это (с небольшой помощью FileUtils в стандартной библиотеке).

require 'fileutils'

Dir.glob('**/*.html').each do |file|
  dir, filename = File.dirname(file), File.basename(file)
  dest = File.join(@target_dir, dir)
  FileUtils.mkdir_p(dest)
  FileUtils.copy_file(file, File.join(dest,filename))
end

Я не слышал о cp --parents, но если он делает то, что вы хотите, то нет никакого стыда в том, чтобы просто использовать его из вашего Rakefile, например:

system("cp --parents #{your} #{args}")

Это может быть полезно:

# copy "files" to "dest" with any sub-folders after "src_root". 
def copy_and_preserve files, dest, src_root
  files.each {|f|
    f.slice! src_root # the files without src_root dir
    dest_dir = File.dirname(File.join(dest, f))
    FileUtils.mkdir_p dest_dir # make dest dir
    FileUtils.cp(File.join(src_root, f), dest_dir, {:verbose => true})
  }
end