![scp 可以递归复制目录吗?](https://linux22.com/image/547725/scp%20%E5%8F%AF%E4%BB%A5%E9%80%92%E5%BD%92%E5%A4%8D%E5%88%B6%E7%9B%AE%E5%BD%95%E5%90%97%EF%BC%9F.png)
目前我只能复制单个.tar
文件。但是如何使用 递归复制目录scp
?
答案1
是的,使用-r
:
scp -rp sourcedirectory user@dest:/path
- -r 表示递归
- -p 保留原始文件的修改时间、访问时间和模式。
注意:这将创建sourcedirectory
内部/path
,因此文件将位于/path/sourcedirectory
答案2
虽然前面的答案在技术上是正确的,但你也应该考虑使用rsync
相反, rsync
使用差异机制比较发送方和接收方的数据,这样就不必重新发送已经发送过的数据。
如果您要多次将某些内容复制到远程计算机,请使用rsync
。实际上,每次使用都很好,rsync
因为它对复制文件权限和所有权以及排除某些文件或目录等具有更多控制权。一般来说:
$ rsync -av /local/dir/ server:/remote/dir/
将同步本地目录和远程目录。如果您第二次运行该程序,而本地目录的内容没有改变,则不会传输任何数据 - 这比scp
每次运行和复制所有内容要高效得多。
此外,rsync
与 不同,它允许您非常轻松地从中断的传输中恢复scp
。
最后,的现代版本rsync
默认通过 ssh 运行,因此如果scp
已经在运行,那么rsync
应该基本上是一个直接的替代品。
答案3
这就是该-r
选项的用途。:)
查看scp 手册页如果需要的话,了解更多信息。
答案4
最好的方法是通过 SSH 使用 rsync
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
我最喜欢的选项是 -Pazvessh --delete:
- -a:存档模式(包含许多默认常用选项,包括保留符号链接)
- -z :压缩
- -v :详细:显示文件
- -P :显示文件完成/剩余文件的进度
- -e ssh :使用 ssh 协议进行 rsync
- --delete :删除目标中不再存在于源中的文件