使用Rclone实现OSS向S3定时同步文件

Rclone介绍

Rclone 是一个命令行程序,用于管理云存储上的文件。它是云供应商 Web 存储接口的功能丰富的替代方案。它支持超过 40 种不同的云存储服务,包括 Amazon S3, Google Drive, Dropbox, Microsoft OneDrive, Google Cloud Storage, Amazon Drive, OpenStack Swift, Backblaze B2, Yandex Disk, SFTP, WebDAV, FTP, SFTP, Minio, Wasabi, Alibaba OSS, SwiftStack, Tencent COS, Wasabi, Yandex.Disk, Yandex.Files等等。

Rclone 支持多种文件传输方式,包括复制,同步,移动,删除文件。它还支持文件加密和压缩,支持分块上传和分块下载,可以暂停和恢复传输,支持文件的校验和合并。

Rclone 的主要优势在于它的灵活性和可扩展性。它可以用来做很多事情,包括备份,文件同步,数据迁移等。它可以在各种平台上运行,包括 Windows,macOS,Linux,FreeBSD,NetBSD 等。

主要的功能如下

将文件备份(和加密)到云存储
从云存储还原(和解密)文件
将云数据镜像到其他云服务或本地
将数据迁移到云,或在云存储供应商之间迁移
将多个、加密、缓存或不同的云存储挂载为磁盘
使用 lsf、ljson、size、ncdu 分析和核算云存储上保存的数据
将文件系统合并在一起,将多个本地和/或云文件系统呈现为一个

安装Rclone

下载地址

curl https://rclone.org/install.sh | sudo bash

生成配置文件

rclone config

按照个人需求选择,也可以随便选,配置文件生成后再修改。
生成的配置文件路径为:/root/.config/rclone/rclone.conf

修改配置文件

vim /root/.config/rclone/rclone.conf
[oss-hz]
type=s3
provider=Alibaba
env_auth=false
access_key_id=AK
secret_access_key=SK
endpoint=oss-cn-hangzhou.aliyuncs.com
acl=private
storage_class=Standard

[s3-ap]
type=s3
provider=AWS
env_auth=false
access_key_id=AK
secret_access_key=SK
region=ap-southeast-1
endpoint=s3.ap-southeast-1.amazonaws.com

配置好后可以先使用rclone lsd验证下是否可以列出

rclone lsd - 列出指定路径下所有的目录/容器/桶

注意这里的名称都是写配置文件的名称

rclone lsd oss-hz:存储桶名

如果列出了桶中的文件夹则可以开启同步了
rclone sync 源名称:源桶 目标名称:目标桶

crontab -e
# 定时每十分钟同步一次,并记录错误日志
10 * * * * rclone sync oss-hz:存储桶名 s3-ap:存储桶名  >> /logs/rclone.log 2>&1

扩展

1.同步本地文件到云存储桶

rclone sync <LOCAL_PATH> oss-hz:存储桶名/target-path/

2.同步云存储桶文件到本地

rclone sync oss-hz:存储桶名/target-path/ <LOCAL_PATH>

3.将本地文件同步到云存储桶,并备份被删除或修改的文件到备份存储桶中

rclone sync <LOCAL_PATH> oss-hz:存储桶名 --backup-dir s3-ap:存储桶名/backup-dir

4.可以通过加 -p = --progress 显示迁移的进度及校验的结果

rclone check oss-hz:存储桶名 s3-ap:存储桶名 -P

5.同步过滤
–exclude 排除文件或目录
–include 包含文件或目录。
–filter - 文件过滤规则,相当于上面两个选项的其它使用方式。包含规则以 + 开头,排除规则以 - 开头。
文件类型过滤

–exclude “*.html”、–filter “- *.html”,排除所有html文件

–include “*.{png,jpg}”、–filter “+ *.{png,jpg}”,包含所有 png 和 jpg 文件,排除其他文件。

目录过滤

–exclude “.git/” 排除所有目录下的.git 目录。

–exclude “/.git/” 只排除根目录下的.git 目录。

–exclude “{Video,Software}/” 排除所有目录下的 Video 和 Software 目录。

–exclude “/{Video,Software}/” 只排除根目录下的 Video 和 Software 目录。

–include “/{Video,Software}/**” 仅包含根目录下的 Video 和 Software 目录的所有内容。

文件大小过滤

默认大小单位为 kBytes ,但可以使用 k ,M 或 G 后缀。

–min-size 过滤小于指定大小的文件。比如 --min-size 50 表示不会传输小于 50k 的文件。

–max-size 过滤大于指定大小的文件。比如 --max-size 1G 表示不会传输大于 1G 的文件。

备注:在实际使用中发现大小过滤两个选项不能同时使用。

常用命令

rclone config - 以控制会话的形式添加rclone的配置,配置保存在rclone.conf文件中。
rclone copy - 将文件从源复制到目的地址,默认跳过已复制完成的。
rclone sync - 将源数据同步到目的地址,只更新目的地址的数据。可添加–dry-run标志来检查要复制、删除的数据
rclone move - 将源数据移动到目的地址。
rclone delete - 删除指定路径下的文件内容。
rclone purge - 清空指定路径下所有文件数据。
rclone mkdir - 创建一个新目录。
rclone rmdir - 删除空目录。
rclone check - 检查源和目的地址数据是否匹配。
rclone ls - 列出指定路径下所有的文件以及文件大小和路径。
rclone lsd - 列出指定路径下所有的目录/容器/桶。
rclone lsl - 列出指定路径下所有文件以及修改时间、文件大小和路径。
rclone md5sum - 为指定路径下的所有文件产生一个md5sum文件。
rclone sha1sum - 为指定路径下的所有文件产生一个sha1sum文件。
rclone size - 获取指定路径下,文件内容的总大小。
rclone version - 查看当前版本。
rclone cleanup - 清空remote。
rclone dedupe - 交互式查找重复文件,进行删除/重命名操作。
rclone mount - 挂载云盘为本地硬盘
fusermount -qzu LocalFolder  - 卸载挂载的云盘
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的第一个问题,我可以告诉你如何使用 JavaScript 实现 OSS 批量下载文件的功能。 首先,你需要使用阿里云提供的 OSS SDK for JavaScript,通过 npm 安装: ``` npm install ali-oss --save ``` 然后,你可以使用以下代码实现批量下载文件: ```javascript const OSS = require('ali-oss'); const co = require('co'); const fs = require('fs'); // 创建 OSS 客户端实例 const client = new OSS({ accessKeyId: '<AccessKeyId>', accessKeySecret: '<AccessKeySecret>', bucket: '<BucketName>', region: '<Region>', }); // 要下载的文件列表 const files = [ 'path/to/file1.txt', 'path/to/file2.txt', 'path/to/file3.txt', ]; // 下载文件 co(function* () { for (let file of files) { const result = yield client.get(file); fs.writeFileSync(`./${file}`, result.content); } }).catch(function (err) { console.log(err); }); ``` 这段代码首先创建了一个 OSS 客户端实例,然后定义了要下载的文件列表,最后使用 `co` 库实现异步流程控制,循环遍历文件列表,逐个下载文件并保存到本地。 至于你提到的第二个问题,我可以告诉你如何在 NestJS 中使用阿里云 OSS 进行文件上传。 首先,你需要安装 `@nest-modules/multer` 和 `ali-oss` 两个库: ``` npm install @nest-modules/multer ali-oss --save ``` 然后,你可以在 NestJS 中定义一个上传服务: ```typescript import { Injectable } from '@nestjs/common'; import { MulterModule } from '@nest-modules/multer'; import * as OSS from 'ali-oss'; @Injectable() export class UploadService { private client: OSS; constructor() { this.client = new OSS({ accessKeyId: '<AccessKeyId>', accessKeySecret: '<AccessKeySecret>', bucket: '<BucketName>', region: '<Region>', }); } async upload(file: Express.Multer.File): Promise<string> { const result = await this.client.put(file.originalname, file.buffer); return result.url; } } ``` 这段代码定义了一个 `UploadService`,通过 `ali-oss` 库创建了一个 OSS 客户端实例,在 `upload` 方法中实现文件上传功能,返回上传后的文件 URL。 最后,你可以在 NestJS 控制器中使用这个上传服务: ```typescript import { Controller, Post, UseInterceptors, UploadedFile } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { UploadService } from './upload.service'; @Controller('upload') export class UploadController { constructor(private readonly uploadService: UploadService) {} @Post() @UseInterceptors(FileInterceptor('file')) async upload(@UploadedFile() file: Express.Multer.File): Promise<string> { return this.uploadService.upload(file); } } ``` 这段代码定义了一个 `UploadController` 控制器,使用 `@UseInterceptors` 装饰器启用 `FileInterceptor` 中间件,将上传的文件传递给 `upload` 方法,调用上传服务上传文件并返回文件 URL。 希望这些代码能够帮助到你,如果你还有其他问题,可以随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值