Копирование файлов с сохранением структуры каталогов с граблями
моя цель-скопировать набор файлов, заданных шаблоном, в целевой каталог. Файлы в исходный каталог может иметь подкаталоги.
пробовал:
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