可以scp复制目录吗?

现在我只能复制一个tar文件,我怎样才能递归复制目录scp


是的,使用-r

scp -rp sourcedirectory user@dest:/path
  • -r表示递归
  • -p保留原始文件的修改时间,访问时间和模式。

注意:这会创建sourcedirectory内部/path文件,/path/sourcedirectory


虽然以前的答案在技术上是正确的,但你也应该考虑使用rsync。 rsync将发送方和接收方的数据与差异机制进行比较,因此不必重新发送先前已发送的数据。

如果您要多次将某些内容复制到远程机器,请使用rsync。实际上,rsync每次使用都很好,因为它具有更多控制功能,例如复制文件权限和所有权以及排除某些文件或目录。一般来说:

$ rsync -av /local/dir/ server:/remote/dir/

将本地目录与远程目录同步。如果您再次运行它,并且本地目录的内容未发生更改,则不会传输数据 – 这比scp每次运行和复制所有内容要高效得多。

此外,rsync允许您很容易地从中断传输恢复,不像scp

最后,rsync默认情况下,现代版本通过ssh运行,所以如果scp已经运行,rsync应该几乎是一个直接替换。


这是-r选择的目的。:)

如果需要,请参阅scp手册页获取更多信息。


递归复制选项’-r’(小写)

scp -r

我与常规的本地递归复制选项’-R’混淆(大写)

cp -R


寻找递归复制标志后,成功使用它感谢这篇文章,我想发布一个建议。

如果情况是您正在复制(递归)目录。也许如果文件被压缩发送,您可以节省传输时间

我最终做的是:

local$ tar -czvf local.tar directory/
local$ scp local.tar user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar

希望这可以帮助


最好的方法是通过SSH使用rsync

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

我的最爱选项是-Pazvessh – 删除:

  • -a:归档模式(包括许多默认的常用选项,包括保留符号链接)
  • -z:压缩
  • -v:详细信息:显示文件
  • -P:显示progess文件完成/剩余文件
  • -e ssh:在ssh协议中执行rsync
  • – 删除:删除目标中不再存在的文件

您可以使用以下简单命令以递归方式将目录复制到压缩存档中:

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/logat的内容复制domain.com~/destination/log您的系统上:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

尽管要镜像一个目录,你可能应该使用rsync

Tags:,

添加评论

友情链接:蝴蝶教程