最近想把数据集放在另一个服务器上,但是如果先下载到本地然后再上传过去,则需要浪费好久时间。
特总结下如何快捷的通过命令完成不同远程服务器之间的文件传输,以及遇到的问题。
SCP命令
Linux scp 命令用于 Linux 之间复制文件和目录。1
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
单个文件的传输
scp /home/src/1.py username@xxx.xx.xx.xx:/home/des/
-
/home/src/1.py
: 当前命令行所在的主机上的某个文件 -
username
: 目标服务器的用户名 -
xxx.xx.xx.xx
: 目标服务器的IP地址,scp默认连接的远端主机22端口 -
/home/des/
: 目标服务器上的文件位置
将这些信息换成自己的就可以了。
整个文件夹的传输
scp -r /home/src/ username@xxx.xx.xx.xx:/home/des/
指定端口传输
如果目标服务器是一个docker,也就是需要指定特定端口号,则指定参数-P
即可, 如下:
scp -P 18888 -r /home/src/ username@xxx.xx.xx.xx:/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命令打包,然后在发送,能够节省很多倍速度文章来源:https://www.toymoban.com/news/detail-417286.html
cd 需要打包的文件夹
tar cf - * | ssh -p 10086 username@xxx.xx.xx.xx "cd /home/des/ && tar xf -"
-
Linux scp命令 ↩︎文章来源地址https://www.toymoban.com/news/detail-417286.html
到了这里,关于SCP命令在不同远程服务器之间发送文件(指定端口、大量小文件操作)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!