使用rsync从远程服务器复制文件到本地机器

当我用ssh连接到远程服务器后,将所有文件从一个目录复制到我机器上的本地目录的命令是什么?

377442 次浏览

从您的本地机器:

rsync -chavzP --stats user@remote.host:/path/to/copy /path/to/local/storage

使用非标准ssh端口的本地机器:

rsync -chavzP -e "ssh -p $portNumber" user@remote.host:/path/to/copy /local/path

或者从远程主机,假设你真的想以这种方式工作,并且你的本地机器正在侦听SSH:

rsync -chavzP --stats /path/to/copy user@host.remoted.from:/path/to/local/storage

有关我常用开关的解释,请参阅< >强man rsync < / >强

如果您有SSH访问权限,则不需要先SSH再复制,只需从目的地使用安全副本(SCP)即可。

scp user@host:/path/file /localpath/file

支持通配符,所以

scp user@host:/path/folder/* /localpath/folder

将复制该文件夹中的所有远程文件。如果复制多个目录。

注意-r也会复制所有子文件夹和内容。

我认为最好从您的本地计算机复制文件,因为如果文件数量或文件大小非常大,如果您当前的ssh会话丢失(管道破裂或其他),复制过程可能会中断。

如果您已经配置ssh密钥连接到远程服务器,您可以使用以下命令:

rsync -avP -e "ssh -i /home/local_user/ssh/key_to_access_remote_server.pem" remote_user@remote_host.ip:/home/remote_user/file.gz /home/local_user/Downloads/

其中v选项是--verbosea选项是--archive -存档模式,P选项与--partial相同-保留部分传输的文件,e选项是--rsh=COMMAND -指定要使用的远程shell。

rsync man page . rsync手册

rsync的TLDR:

传输文件到或从远程主机(不是在两个远程主机之间)。 可以传输单个文件,也可以传输匹配模式的多个文件。 更多信息:https://manned.org/rsync.

  • 从本地传输文件到远程主机:
rsync path/to/local_file remote_host:path/to/remote_directory
  • 从远程主机传输文件到本地:
rsync remote_host:path/to/remote_file path/to/local_directory
  • 使用[v]erbose和[h] human -readable [P]progress以[a] archive(保存属性)和compressed ([z] ippped)模式传输文件:
rsync -azvhP path/to/local_file remote_host:path/to/remote_directory
  • 将一个目录及其所有子目录从远程目录转移到本地目录:
rsync -r remote_host:path/to/remote_directory path/to/local_directory
  • 将目录内容(而不是目录本身)从远程传输到本地:
rsync -r remote_host:path/to/remote_directory/ path/to/local_directory
  • 传输一个目录[r],在[a] archive中保存属性,解析包含的软[l]墨水,忽略已经传输的文件[u],除非更新:
rsync -rauL remote_host:path/to/remote_directory path/to/local_directory
  • 通过SSH传输文件,删除本地不存在的远程文件:
rsync -e ssh --delete remote_host:path/to/remote_file path/to/local_file
  • 通过SSH使用不同的端口传输文件,并显示全局进度:
rsync -e 'ssh -p port' --info=progress2 remote_host:path/to/remote_file path/to/local_file

我使用我的机器的tldr来获取这个信息。