以前同步数据习惯用rsync,最近使用AWS的Transfer Family服务,即SFTP,发现rsync无法用了,因为必须结合ssh,但是SFTP跟ssh不一样。曾经尝试将sftp挂载为本地盘使用rsync,但是发现这样的挂载不稳定,sftp会莫名断开。查询后发现rclone,测试后发现也不错。
安装:
sudo -v ; curl https://rclone.org/install.sh | sudo bash
这种安装方式会自动安装最新版,如果使用ubuntu命令安装:apt install rclone
默认安装的是1.50.2的旧版,这个版本会有很多莫名其妙的问题。例如与sftp使用key验证的时候,会提示:failed to parse private key file: ssh: key is not password protected
安装完成后,查看版本信息:
rclone --version
rclone 创建配置文件是交互式,这个有点意思:
rclone config
按照提示一步步输入即可
完成后的配置文件可通过命令找到保存位置:
rclone config file
具体文件内容,后续可以通过修改文件实现更改配置的目的
这里最后一行我添加了1条规则: set_modtime = false
因为AWS的SFTP存储我设置连接到S3,无法将文件的属性时间设置为默认时间,而是S3根据文件上传时间自动添加。如果不加这一条,会提示无法修改时间的错误。
具体命令:
rclone copy -P --no-update-modtime --size-only /share/Test/ aff:/Test/
解析:
-P 即显示过程,类似rsync -v
--no-update-modtime --size-only 无法根据文件修改时间检查是否同步,因为sftp上的时间是文件上传时间,始终跟本地上文件的时间不一致,如果不加会导致文件不断被重复上传,因此改为通过检查文件大小来决定是否同步旧文件,因为文件如果被修改过,size肯定会发生变化
/share/Test/ 指定本地需要同步的文件夹
aff:/Test/ aff是创建的配置的名字,:/Test/是SFTP上对应的文件夹