目前,我只能复制一个.tar
文件。但是,如何使用scp
递归复制目录?
是的,请使用-r
:
scp -rp sourcedirectory [email protected]:/path
注意:这会在/path
内创建sourcedirectory
,因此文件将位于/path/sourcedirectory
尽管以上答案在技术上是正确的,但您也应该考虑使用 rsync
代替。 rsync
使用diff机制比较发送方和接收方的数据,因此它不必重新发送先前已发送的数据。
如果要多次复制内容到远程计算机,请使用rsync
。实际上,每次使用rsync
很好,因为它对复制文件的权限和所有权以及排除某些文件或目录具有更多控制权。一般来说:
$ rsync -av /local/dir/ server:/remote/dir/
将本地目录与远程目录同步。如果您第二次运行它并且本地目录的内容没有更改,则不会传输任何数据-比运行scp
并每次复制所有内容都效率更高。
此外,与rsync
不同,scp
允许您非常轻松地从中断的传输中恢复。
最后,默认情况下,现代版本的rsync
在ssh上运行,因此,如果scp
已在工作,则rsync
应该可以直接替换。
那就是-r
选项适用。 :)
有关更多信息,请参见 scp手册页 。
递归复制选项“ -r”(小写)
scp -r
我将其与常规的本地递归复制选项“ -R”(大写)混淆了
cp -R
最好的方法是通过SSH使用rsync
rsync -a -essh /source/ [email protected]:/dest/
rsync -a -essh [email protected]:/source/ /dest/
我最喜欢的选项是-Pazvessh --delete:
在寻找递归复制标志并通过这篇文章成功使用了它之后,我只想提出一个建议。
如果是这种情况,则说明您正在(递归)复制目录。也许如果文件以压缩方式发送,则可以节省传输时间
我最后所做的是:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz
希望这可以帮助
您可以使用以下简单命令将目录递归复制到压缩档案中:
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
您还可以使用管道在目标系统上提取文件。此命令会将/var/log
处的domain.com
的内容复制到系统上的~/destination/log
:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
虽然要镜像目录,但您可能应该使用rsync
...
如果您希望将用户密码作为参数而不是交互式输入,则可以使用sshpass
(Sudo apt-get install -y sshpass
)。
例:
sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
您可以将-r选项与scp命令一起使用,以在任何系统上递归复制目录。如果您还需要其他任何内容,请参考 scp命令教程 。 -r选项代表大多数Linux命令中的递归操作。