如何编写脚本scp -r copy?

时间:2010-07-31 19:14:57

标签: linux scp recursion

我似乎无法说服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行为(至少从我测试过的内容)以这种方式是相同的。

谢谢你, 格言。

2 个答案:

答案 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/]表示复制文件夹的内容。如果您将尾部斜杠关闭,它将复制目录本身[如果是递归]。

希望你发现这很有用。 :) 马特