it-swarm.cn

scp可以递归复制目录吗?

目前,我只能复制一个.tar文件。但是,如何使用scp递归复制目录?

610
kernel

是的,请使用-r

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

注意:这会在/path内创建sourcedirectory,因此文件将位于/path/sourcedirectory

981
dmourati

尽管以上答案在技术上是正确的,但您也应该考虑使用 rsync 代替。 rsync使用diff机制比较发送方和接收方的数据,因此它不必重新发送先前已发送的数据。

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

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

将本地目录与远程目录同步。如果您第二次运行它并且本地目录的内容没有更改,则不会传输任何数据-比运行scp并每次复制所有内容都效率更高。

此外,与rsync不同,scp允许您非常轻松地从中断的传输中恢复。

最后,默认情况下,现代版本的rsync在ssh上运行,因此,如果scp已在工作,则rsync应该可以直接替换。

177
Phil Hollenback

那就是-r选项适用。 :)

有关更多信息,请参见 scp手册页

34
HedgeMage

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

scp -r

我将其与常规的本地递归复制选项“ -R”(大写)混淆了

cp -R
12
Tarun

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

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

我最喜欢的选项是-Pazvessh --delete:

  • -a:归档模式(包括许多默认的公共选项,包括保留符号链接)
  • -z:压缩
  • -v:详细:显示文件
  • -P:将进度显示为已完成文件/剩余文件
  • -e ssh:在ssh协议中执行rsync
  • --delete:删除目的地中不再存在的目标文件
7
mick

在寻找递归复制标志并通过这篇文章成功使用了它之后,我只想提出一个建议。

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

我最后所做的是:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

希望这可以帮助

4
user9869932

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

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...

2
Anubioz

如果您希望将用户密码作为参数而不是交互式输入,则可以使用sshpassSudo apt-get install -y sshpass)。

例:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1
Franck Dernoncourt

您可以将-r选项与scp命令一起使用,以在任何系统上递归复制目录。如果您还需要其他任何内容,请参考 scp命令教程 。 -r选项代表大多数Linux命令中的递归操作。

0
atthik