我似乎无法说服scp表现出来。
对于测试数据
ubuntu@domU-12-31-38-00-D4-F1:/tmp$ find /tmp/a1/
/tmp/a1/
/tmp/a1/a2
/tmp/a1/a2/a3
发出命令
ubuntu@domU-12-31-38-00-D4-F1:/tmp$ scp -r /tmp/a1 domU-12-31-38-00-E2-52.compute-1.internal:/tmp/a1
我希望在domU-12-31-38-00-E2-52.compute-1.internal上创建相同的目录结构,无论目标主机上是否存在目录/ tmp / a1。相反,scp实际创建的是以下结构(如果目标主机上存在/ tmp / a1)
ubuntu@domU-12-31-38-00-D4-F1:/tmp$ ssh domU-12-31-38-00-E2-52.compute-1.internal find /tmp/a1
/tmp/a1
/tmp/a1/a1
/tmp/a1/a1/a2
/tmp/a1/a1/a2/a3
如何强制scp作为操作的根目录复制到给定目录中?
稍后我想编写此操作的脚本,以便master上的给定目录路径可以调用一个脚本,该脚本将相同的目录结构复制到所有从属。请注意,rsync行为(至少从我测试过的内容)以这种方式是相同的。
谢谢你, 格言。
答案 0 :(得分:2)
scp
模仿cp
的行为,即复制INTO目标目录(如果存在)。只需将其复制到/tmp
而不是/tmp/a1
。
答案 1 :(得分:0)
而不是使用
$ scp -r /tmp/a1
用这个:
$ scp -r /tmp/a1/*
这将复制/ tmp / a1下的每个文件,因此您的目标结构将是
的/ tmp / A1 / A2 / A3
或者,我建议将目标目录简单地设为“/ tmp /”,而不是“/ tmp / a1 /”,无论哪种方式都可行。关于rsync,不,它不一样:**this/**
到rsync意味着**this/**
或scp
cp
。尾部斜杠[this/]
表示复制文件夹的内容。如果您将尾部斜杠关闭,它将复制目录本身[如果是递归]。
希望你发现这很有用。 :) 马特