Linux 文件传输和同步

Linux 文件传输和同步

@aikenhong 2022

当我们需要在Server之间进行,或者Server和WSL之间进行文件的传输,以及文件夹的同步的时候,如果要打开Xftp之类的软件进行,有繁琐的操作中转,或者说目录较为庞杂的时候,也显得有些麻烦。

于是我们可能希望使用脚本,来实现更便捷,同时也能设置定时功能,使得操作简单便捷,经过简单的调研,我们目前尝试使用以下几种方法,并取得了成功。

Rsync 同步目录

rsync是借助ssh服务进行的文件传输,为了使用起来方便,我们首先需要配置免密登录,在服务器之间传输SSH密钥,参考[[Envs/SSH]]

此后我们便可以编写同步脚本来同步远程的目录和本地目录,当然也可以执行反向的命令,

1
rsync -azP --delete -e 'ssh -p port' --progress --stats --exclude "big Files or sth" user@ip:source_path target_path >transfer.log

根据progress和stats我们记录传输过程中的日志,并输出到transfer.log,同时使用exclude排除大文件,避免传输过慢。

a: 归档文件模式(保留文件的时间戳等),保括了r的递归
z: 使用压缩文件传输
P: 支持断点续传
delete: 会删除目标文件中多出来的东西,保持同步,使得成为远程的镜像,但是有时候我们可能不需要这点,避免同步损毁

参考:


SSH 常用场景和操作

SSH 常用场景和操作

主要介绍ssh服务在以下的几个方面(windows,linux)的使用情况:远程服务器连接(22),git&github(gitee),vscode免密登录。

ssh-key

GITHUB关于SSH的教程 👈可以直接切换成中文模式的

查看是否已存在

1
ls -al ~/.ssh

初始化 / 生成 ssh key

1
2
3
4
5
6
7
# github 推荐,优先度从上到下递减
ssh-keygen -t ed25519 -C "your_email@example.com"
# if not support
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# tradition
ssh-keygen -t rsa -C "chenlangl@outlook.com"

将ssh添加到github的个人权限界面中

免密登录

在github的教程中也有另一种方式来实现免密登录,好像是ssh-agent的方式安全的保存密码。