我有一条路径是:
/one/two/three/four/five
我想要 scpfour/five/
递归到该位置的另一台机器:
/zero/
使其看起来像:
/zero/four/five
我当前的路径是/one/two/three
当我这样做时:
scp -r four/five user@bla:/zero/
但在目标机器上它看起来像:
/zero/five/
代替:
/zero/four/five/
(如果 rsync 更简单,很高兴使用它)。
答案1
本地业务喜欢mv four/five /zero/
或cp -r four/five /zero/
不喜欢创造/zero/four/
,也几乎没有人期望他们创造。因此,你所谓的“不期望”对我来说是相当期望的。
tar
存储提供的路径(参见这个问题)。利用这个事实。
cd /one/two/three \
&& tar -cf - four/five | ssh user@bla '
cd /zero && tar -xf -
'
答案2
scp
mv
行为与此处相同cp
。假设除您可以运行four
之外还包含其他目录five
ssh user@bla 'mkdir -p /zero/four'
(cd four && scp -r five user@bla:/zero/four/)
只是复制five
。
mkdir -p
如果目录已存在,则避免出现错误消息(cd ... )
在子 shell 中运行该行,因此您之后不需要cd
退出four