0

我似乎无法说服 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 作为操作的根目录复制到给定目录?

稍后我想编写此操作的脚本,以便主服务器上的给定目录路径我可以调用一个脚本,将相同的目录结构复制到所有从服务器。请注意,rsync 行为(至少从我测试过的情况来看)在这种方式下是相同的。

谢谢你,马克西姆。

4

2 回答 2

2

scp正在模仿 的行为cp,即复制 INTO 目标目录(如果存在)。只需将其复制到/tmp而不是/tmp/a1.

于 2010-07-31T19:19:35.290 回答
0

而不是 $ scp -r /tmp/a1 使用这个: $ scp -r /tmp/a1/* 它将复制/tmp/a1下的每个文件,因此您的目标结构将是/tmp/a1/a2/a3 否则,我建议将目标目录简单地制作为“/tmp/” ,而不是“/tmp/a1/”,无论哪种方式都可以。而关于 rsync,不,它是不一样的:对于**this/**rsync 意味着or 。尾部斜杠表示复制文件夹的内容。如果您将尾部斜杠关闭,它将复制目录本身[如果递归]。**this/**scpcp[this/]

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

于 2011-04-04T19:00:11.427 回答