我尝试在ruby中复制文件夹,但收到“无法将目录复制到自身”的错误
我不明白为什么会这样,有人可以解释一下吗?如何使用新名称复制完整的文件夹。这是我的代码,我尝试复制其名称中带有时间戳的源文件夹。
$releaseFolder = 'D:\ruby_workspace\fpsupdater\release'
$frontendSubPath = '\server\pdixfrontend\tomcat\conf'
$backendSubPath = '\server\pdixbackend\tomcat\conf\Catalina'
def println(text)
puts $timestamp.inspect + ': ' + text
end
def getFileTimestamp()
stamp = $timestamp.inspect
stamp.gsub!(/\s+|:|\++/,"_")
end
def backupContext()
target = @configHash["target"]
if (Dir.exists?(target))
println("backup of target " + target)
println("need to backup: " + target + $frontendSubPath)
println("need to backup: " + target + $backendSubPath)
source = "#{target}#{$frontendSubPath}"
backup = "#{target}#{$frontendSubPath}\\" + getFileTimestamp + "_conf"
println(source)
println(backup)
FileUtils.cp_r source , backup
else
puts "cannot backup because target does not exists"
end
end
答案 0 :(得分:2)
您无法将目录复制到同一目录,例如:
FileUtils.cp_r "C:/TEST", "C:/TEST"
你甚至无法对你要复制的目录进行递归复制,因为那样你就可以进入永无止境的循环了!
FileUtils.cp_r "C:/TEST", "C:/TEST/SUBFOLDER"
如果需要,请使用临时目录然后将其移回。同样优化你的代码,getFileTimestamp可以更好: - )
答案 1 :(得分:0)
backup = "#{target}#{$frontendSubPath}\\" + getFileTimestamp + "_conf"
注意你仍然使用frontedSubPath而不是backendSubPath