现在我只能复制一个单一的tar文件,我怎样才能用scp
recursion复制目录?
是的,使用-r
:
scp -rp sourcedirectory user@dest:/path
注意:这将在/path
创buildsourcedirectory
因此文件将位于/path/sourcedirectory
虽然以前的答案在技术上是正确的,但也应该考虑使用rsync
。 rsync
将发送方和接收方的数据与diff机制进行比较,因此不必重新发送先前已发送的数据。
如果您要多次将某些内容复制到远程计算机,请使用rsync
。 实际上,每次使用rsync
都是很好的,因为它拥有更多的控制权限,例如复制文件权限和所有权,排除某些文件或目录。 一般来说:
$ rsync -av /local/dir/ server:/remote/dir/
将本地目录与远程目录同步。 如果您再次运行它,并且本地目录的内容没有更改,则不会传输任何数据 – 这比运行scp
和每次复制所有内容要高效得多。
另外, rsync
允许你很容易地从中断传输中恢复,不像scp
。
最后, rsync
的现代版本默认运行在ssh上,所以如果scp
已经在运行的话, rsync
应该是一个简单的替代品。
这是-r
选项的用途。 🙂
如果需要,请参阅scp手册页获取更多信息。
recursion复制选项“-r”(小写)
scp -r
我将其与常规的本地recursion复制选项“-R”混淆(大写)
cp -R
在寻找recursion复制标志,并成功地使用它感谢这篇文章,我想张贴只是一个build议。
如果情况是你正在复制(recursion)一个目录。 也许如果文件被压缩发送,你可以节省时间在传输
我最后做的是:
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 – 删除:
您可以使用这个简单的命令recursion地将目录复制到压缩的存档中:
ssh -p 22 [email protected] 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
例如,要将/var/log
从domain.com
复制到~/logs.tgz
请运行:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' > ~/logs.tgz
您还可以使用pipe道在目标系统上提取文件。 这个命令会将domain.com
上/var/log
内容复制到你系统上的~/destination/log
:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
尽pipe要镜像一个目录,你可能应该使用rsync
…
如果您希望将用户密码作为parameter passing,而不是以交互方式input,则可以使用sshpass
( sudo apt-get install -y sshpass
)。
例:
sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
另一个(可能更好的重复使用)选项是使用NFS – 检查nfs-kernel-server以及如何设置NFS共享。