SCP命令在不同远程服务器之间发送文件(指定端口、大量小文件操作)

最近想把数据集放在另一个服务器上,但是如果先下载到本地然后再上传过去,则需要浪费好久时间。

特总结下如何快捷的通过命令完成不同远程服务器之间的文件传输,以及遇到的问题。

SCP命令

Linux scp 命令用于 Linux 之间复制文件和目录。1
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

单个文件的传输

scp /home/src/1.py [email protected]:/home/des/
  • /home/src/1.py: 当前命令行所在的主机上的某个文件
  • username: 目标服务器的用户名
  • xxx.xx.xx.xx: 目标服务器的IP地址,scp默认连接的远端主机22端口
  • /home/des/: 目标服务器上的文件位置

将这些信息换成自己的就可以了。


整个文件夹的传输

scp -r /home/src/ [email protected]:/home/des/

指定端口传输

如果目标服务器是一个docker,也就是需要指定特定端口号,则指定参数-P即可, 如下:

scp -P 18888 -r /home/src/ [email protected]:/home/des/
  • 18888: 表示docker镜像对应的的端口号

需要注意的问题

  • 指定端口传输,需注意是参数大写的P.
  • 传输需要保证源文件或文件夹是可读的,目标文件夹是可写的,否则会报如下
Permission denied, please try again

可通过chmod命令暂时修改权限为766,也就是rwx rw- rw-

chmod 766 xxx.txt

然后再改回来(通常文件默认是rwx r-x r-x)

chmod 755 xxx.txt

传输内容为大量的小文件

当所传输的文件夹中包含大量的小文件,比如数据集(有很多张图片),这时候使用SCP速度会很慢,因为每传输一个文件都需要进行 协议信息确认以及传输结束后的确认信息,这样的开销是非常大的.

因此通常会结合tar命令打包,然后在发送,能够节省很多倍速度

cd 需要打包的文件夹
tar cf - * | ssh -p 10086 [email protected] "cd /home/des/ && tar xf -"

  1. Linux scp命令 ↩︎

你可能感兴趣的:(Ubuntu系统,Linux学习,linux,服务器,运维)