我在文件夹../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任务将文件夹结构复制到其父文件?
答案 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
但这似乎是很多打字来实现我的目标