Answers:
虽然以上答案在技术上是正确的,但您也应该考虑rsync
改用。 rsync
使用diff机制比较发送方和接收方的数据,因此不必重新发送先前已发送的数据。
如果要多次复制到远程计算机,请使用rsync
。实际上,rsync
每次使用都很好,因为它具有更多控制权,例如复制文件权限和所有权以及排除某些文件或目录。一般来说:
$ rsync -av /local/dir/ server:/remote/dir/
将本地目录与远程目录同步。如果您第二次运行它并且本地目录的内容没有更改,则不会传输任何数据-比scp
每次运行并复制所有内容都效率更高。
此外rsync
,不同于,您可以非常轻松地从中断的传输中恢复scp
。
最后,rsync
默认情况下,现代版本的ssh可以运行在ssh上,因此,如果该版本scp
已经rsync
可以使用,则应该可以直接替换。
rsync
是更有效率的。当前不做的一件事scp
是允许在远程主机之间进行复制(至少无需在其中之一上运行rsync客户端)。
-av
:v表示冗长,a表示存档,是-rlptgoD的快捷方式,表示递归,保留权利所有者的日期和链接。如果您只想递归使用-r
递归复制选项“ -r”(小写)
scp -r
我将其与常规的本地递归复制选项“ -R”(大写)混淆了
cp -R
最好的方法是通过SSH使用rsync
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
我最喜欢的选项是-Pazvessh --delete:
rsync
我使用的所有版本ssh
默认情况下都会使用,因此-essh
不太可能需要。而且,用于连接到远程主机的命令的选择实际上与递归复制无关。
在寻找递归复制标志并通过这篇文章成功使用了它之后,我只想提出一个建议。
如果是这种情况,则说明您正在(递归)复制目录。也许如果文件以压缩方式发送,则可以节省传输时间
我最后所做的是:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
希望这可以帮助
.tar.gz
或,.tgz
因为文件是gzip压缩的tar存档(因为使用了该-z
标志)。
您可以使用以下简单命令将目录递归复制到压缩档案中:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
例如,要复制的内容/var/log
来自domain.com
于~/logs.tgz
你运行:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
您还可以使用管道在目标系统上提取文件。此命令将复制的内容/var/log
在domain.com
给~/destination/log
您的系统上:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
虽然要镜像目录,但您可能应该使用rsync
...
您可以将-r选项与scp命令一起使用,以在任何系统上递归复制目录。如果您还有其他需要,请参考scp命令教程。-r选项代表大多数Linux命令中的递归操作。
-r
选项已在几年前提出,并且是公认的答案。