最近想把数据集放在另一个服务器上,但是如果先下载到本地然后再上传过去,则需要浪费好久时间。
特总结下如何快捷的通过命令完成不同远程服务器之间的文件传输,以及遇到的问题。
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命令打包,然后在发送,能够节省很多倍速度
cd 需要打包的文件夹
tar cf - * | ssh -p 10086 username@xxx.xx.xx.xx "cd /home/des/ && tar xf -"
来源地址:https://blog.csdn.net/qq_37344125/article/details/128131841