复制期间是否可能使SCP忽略符号链接?


80

我需要重新安装服务器我们之一,作为预防措施,我想移动/home/etc/opt,和/Services备份服务器。

但是,我有一个问题:由于大量的符号链接,很多文件被多次复制。

是否可以scp忽略符号链接(或实际上将链接复制为链接而不是目录或文件)?如果没有,还有另一种方法吗?

Answers:


82

我知道有可能,我只是选择了错误的工具。我用rsync做到了

rsync --progress -avhe ssh /usr/local/  XXX.XXX.XXX.XXX:/BackUp/usr/local/

1
那么这个命令是什么呢?它会忽略符号链接还是创建新的符号链接?-啊?
ErnestasStankevičius'16

3
a是归档文件(保留内容),v冗长的,h易于阅读的输出,请e指定您要使用的服务(在本例中为ssh)。在这里
quietContest

谢谢。旧服务器被封存。新服务器需要的内容。丢失了所有软链接,但许多软链接已损坏,因此这对新服务器而言只是一项缓慢的维护任务。再次感谢。
jlettvin

1
--safe-links允许保留目录内的链接,而不复制指向目录外的链接。
Colin Pitrat,

29

我发现rsync方法对我不起作用,但是我在此网站(www.docstore.mik.ua/orelly)上找到了可行的替代方法。

特别是“ O'Reilly:SSH:安全Shell。权威指南”的7.5.3节。

7.5.3。目录的递归副本

...

尽管scp可以复制目录,但这不一定是最好的方法。如果您的目录包含硬链接或软链接,则不会重复。链接被复制为纯文件(链接目标),更糟糕的是,循环目录链接导致scp1无限循环。(scp2检测符号链接并复制其目标。)其他类型的特殊文件(例如命名管道)也无法正确复制。更好的解决方案是使用tar,它可以正确处理特殊文件并将其发送到远程通过SSH解密计算机:

$ tar cf - /usr/local/bin | ssh server.example.com tar xf -

1
如果远程端未安装rsync,或者如果您恰好已经有了源目录的压缩文件,则这是一个很好的建议。
Trebor Rude 2014年

1
它需要一个“ p”(tar xpf)来保留目标位置的权限。
保罗·林奇

注意,此命令必须从计算机运行,文件目标计算机。对于我的情况(许多小的,未压缩的文件),它scp或更快或更有效rsync
Gerardo Lima

18

同时使用taroverssh作为发送者和接收者也可以做到这一点:

cd $DEST_DIR
ssh user@remote-host 'cd $REMOTE_SRC_DIR; tar cf - ./' | tar xvf -

我在源端--one-file-system和目标端添加了p以保留权限。
ceving 2014年

焦油手册页说;--one-file-system =不要越过挂载点
AnneTheAgile 2016年

2

一种解决方案是使用壳管。我遇到一种情况,我得到了一些* .gz文件和某些软件生成的符号链接,这些符号链接链接到名称稍短的相同* .gz文件。如果仅使用scp,则符号链接将被复制为常规文件,并导致重复。我知道rsync可以忽略符号链接,但是我的gz文件未使用可同步选项进行压缩,并且复制这些gz文件时同步非常慢。因此,我只是使用以下脚本来复制文件:

find . -type f -exec scp {} target_host:/directory/name/data \;

-f选项将仅查找常规文件,而忽略符号链接。您需要在源主机上给出此命令。希望这对我的情况有所帮助。让我知道我是否错过任何事情。


0

可以在客户端执行的一种线性解决方案,以使用tar + ssh命令从服务器复制文件夹。

ssh user@<Server IP/link> 'mkdir -p <Remote destination directory;cd <Remote destination directory>; tar cf - ./' | tar xf - C <Source destination directory>

注意:mkdir是必须的,如果不存在远程目标目录,则该命令将简单地压缩远程服务器的整个主目录并将其提取到客户端。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.