我想复制选定的构建产品,保留它们的目录结构部分,但是:
Dir.chdir('build/sources/ios_src') {
FileUtils.cp_r(Dir.glob('build/Build/Products/*/*.app*'), '/tmp/bcsh')
}
结果
Errno::ENOENT: No such file or directory @ dir_s_mkdir - /tmp/bcsh/Booble.app
尽管全球都回归了这个:
Dir.chdir('build/sources/ios_src') {
Dir.glob('build/Build/Products/*/*.app*')
}
=> ["build/Build/Products/Calabash-iphonesimulator/Booble.app",
"build/Build/Products/Calabash-iphonesimulator/Booble.app.dSYM"]
我希望/tmp/bsch/build/Build/Products/.../Booble.app
和.../Booble.app.dSYM
不是/tmp/bcsh/Booble.app
和/tmp/bcsh/Booble.app.dSYM
。
为了清楚起见,我能够创建一个目录,但更有用的错误表明文件最终会在我不想要它们的地方结束。
答案 0 :(得分:0)
嗯。感谢mudasobwa关于glob的暗示。这似乎复制了glob的结果,保留了glob的目录结构和每个条目:
Dir.chdir('build/sources/ios_src') {
Dir.glob('build/Build/Products/*/*.app*') { |file|
dest = File.dirname("/tmp/bcsh/#{file}")
FileUtils.mkdir_p(dest) && FileUtils.cp_r(file, dest)
}
}
不热衷于临时,但
.... { |file|
FileUtils.cp_r(file, FileUtils.mkdir_p(File.dirname("/tmp/bcsh/#{file}")).first)
}
有点极端。
答案 1 :(得分:0)
Dir.chdir('build/sources/ios_src') do
Dir.glob('build/Build/Products/*/*.app*') do |filename|
dir = File.join("/tmp/bcsh", *filename.split(File::SEPARATOR)[0...-1])
FileUtils.mkdir_p(dir)
FileUtils.cp(filename, dir)
end
end