将文件夹内容复制到Rake中的父目录(在Windows上)

时间:2015-07-24 11:50:41

标签: ruby rake

我在文件夹../SomeFolder/AndAnother/dist

中有一组文件

dist文件夹包含一堆文件和文件夹,我想在Rake任务中向上移动一个级别。

所以

../SomeFolder/AndAnother/dist/subFolder/a.txt变为../SomeFolder/AndAnother/subFolder/a.txt

我可以通过

在linux上做到这一点
task :lift_to_parent do
  sh('mv', '../SomeFolder/AndAnother/dist/*', '../SomeFolder/AndAnother')
end

但是这个Rake任务也在Windows上运行,在那个操作系统上我得到Errno::EACCES: Permission denied @ unlink_internal

我希望FileUtils.mv能在linux和windows上运行......

但如果我

task :lift_to_parent do
  FileUtils.mv '../SomeFolder/AndAnother/dist', '../SomeFolder/AndAnother', :force => true
end

我得到ArgumentError: same file: ../SomeFolder/AndAnother/dist and ../SomeFolder/AndAnother/dist所以我显然遗漏了一些内容,允许FileUtils.mv复制一个关卡(或以错误的方式解决这个问题)

那么,如何修复我的FileUtils版本或以其他方式使用Rake任务将文件夹结构复制到其父文件?

1 个答案:

答案 0 :(得分:0)

我最终还是这样做了

task : lift_to_parent do
  copied_by_jenkins = '../SomeFolder/AndAnother/dist'
  copy_pattern = "#{copied_by_jenkins}/**/*"
  target_directory = '../SomeFolder/AndAnother/Public'

  next unless File.exists? copied_by_jenkins

  FileList[copy_pattern].each do |file|
    file_path = File.dirname(file).sub! copied_by_jenkins, ''
    file_name = File.basename(file)
    target_directory = File.join(target_directory, file_path)
    destination = File.join(target_directory, file_name)

    FileUtils.mkdir_p target_directory
    FileUtils.copy_file(file, destination) unless File.directory? file
  end

  FileUtils.remove copied_by_jenkins
end

但这似乎是很多打字来实现我的目标