本文由 简悦 SimpRead 转码, 原文地址 cloud.tencent.com

Rclone 是一个命令行程序,用于管理云存储上的文件。它是云供应商的网络存储接口的一个功能丰富的替代品。超过 40 种云存储产品支持 rclone,包括 S3…

概述

Rclone 是一个命令行程序,用于管理云存储上的文件。它是云供应商的网络存储接口的一个功能丰富的替代品。超过 40 种云存储产品支持 rclone,包括 S3 对象存储、企业和消费者文件存储服务以及标准传输协议。

用户称 Rclone _为 “云存储的瑞士军刀”_、 _“无异于魔法的科技”_。

Rclone 具有强大的云等同于 unix 命令 rsync、cp、mv、mount、ls、ncdu、tree、rm 和 cat。Rclone 熟悉的语法包括 shell 管道支持和 –dry-run 保护。它在命令行、脚本或通过其 API 使用。

Rclone 多种文件传输协议,支持 SFTP,HTTP,WebDAV,FTP 和 DLNA。Rclone 是一个成熟的开源软件,最初受 rsync 的启发并采用 Golang 编写。其文档和社区也都非常好,提供广泛和友好的使用用例。

官网:https://rclone.org/

功能

Rclone 支持但不仅限于下面列出功能:

  • 将文件备份(和加密)到云存储
  • 从云存储恢复(和解密)文件
  • 将云数据镜像到其他云服务或本地
  • 将数据迁移到云端,或在云存储供应商之间迁移
  • 将多个、加密、缓存或多样化的云存储挂载为磁盘
  • 使用 lsf、ljson、size、ncdu 分析和说明云存储上保存的数据
  • 联合文件系统一起呈现多个本地和 / 或云文件系统作为一个

特性

  • 接送服务
    • 始终检查 MD5、SHA1 哈希值以确保文件完整性
    • 时间戳保留在文件中
    • 可以随时重新启动操作
    • 可以进出网络,例如两个不同的云提供商
    • 可以使用多线程下载到本地磁盘
  • 将新文件或更改的文件复制到云存储
  • 同步(一种方式)使目录相同
  • 验证后将文件移动到云存储删除本地
  • 检查哈希和丢失 / 额外的文件
  • 将您的云存储挂载为网络磁盘
  • 通过 HTTP / WebDav / FTP / SFTP / DLNA 服务本地或远程文件
  • 实验性基于 Web 的 GUI

使用

官方文档写得非常详细,这里主要用写几个应用场景看如何使用。以下使用 ubuntu22.04 为例演示:

安装

Rclone 就是一个二进制文件包,可以直接下载设置环境变量即可使用,这里直接使用官方的脚本安装。

curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64

sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone

直接执行 rclone version 可以查看到版本号即安装成功。

配置

配置可以直接添加配置文件的方式或者通过进入交互式配置会话命令一步步的完成配置。

默认配置完成的后配置文件都保存在:/root/.config/rclone/rclone.conf 目录下。

我这里直接通过给出腾讯 COS 的配置文件。

[tencent-cos] # 自定义的名称
type = s3  # 存储类型,参考官方文档所有支持的类型
provider = TencentCOS  # 提供商,参考官方文档或者全部
env_auth = false   # 不通过环境变量配置认证
access_key_id = AKxxxxxxxx  # 腾讯云后台生成的密钥key
secret_access_key = Secretxxxxxxx # 腾讯云后台生成的密钥secret
endpoint = cos.ap-chengdu.myqcloud.com # 腾讯云cos所在的地区,看你所在存储桶的公网地址

语法

# 本地到网盘
rclone [功能选项] <本地路径> <配置名称:路径> [参数] [参数]
# 网盘到本地
rclone [功能选项] <配置名称:路径> <本地路径> [参数] [参数]
# 网盘到网盘
rclone [功能选项] <配置名称:路径> <配置名称:路径> [参数] [参数]

# [参数]为可选项

举例:

# 同步本地/data/file的文件夹内容到tencent-cos存储下的/beifen文件夹中,并且排除/root/excludes.txt中指定的文件内容
rclone sync /data/file tencent-cos:/beifen --exclude-from '/root/excludes.txt'

# 两个网盘文件同步
rclone copy 配置网盘名称1:网盘路径 配置网盘名称2:网盘路径

命令列表

使用 rclone --help 可查看所有命令,这里只列出常用的命令,其他的命令可以看官方文档详细了解:

rclone copy

复制

rclone move

移动,如果要在移动后删除空源目录,加上 --delete-empty-src-dirs 参数

rclone mount

挂载

rclone sync

同步:将源目录同步到目标目录,只更改目标目录

rclone size

查看网盘文件占用大小

rclone delete

删除路径下的文件内容

rclone purge

删除路径及其所有文件内容

rclone mkdir

创建目录

rclone rmdir

删除目录

rclone rmdirs

删除指定环境下的空目录。如果加上 --leave-root 参数,则不会删除根目录

rclone check

检查源和目的地址数据是否匹配

rclone ls

列出指定路径下的所有的文件以及文件大小和路径

rclone lsl

比上面多一个显示上传时间

rclone lsd

列出指定路径下的目录

rclone lsf

列出指定路径下的目录和文件

常用参数

-n = --dry-run

测试运行,查看 rclone 在实际运行中会进行哪些操作

-P = --progress

显示实时传输进度,500 ms 刷新一次,否则默认 1 分钟刷新一次

--cache-chunk-size 5M

块的大小,默认 5M 越大上传越快,占用内存越多,太大可能会导致进程中断

--onedrive-chunk-size 100M

提高 OneDrive 上传速度适用于 G 口宽带服务器

--drive-chunk-size 64M

提高 Google Drive 上传速度适用于 G 口宽带服务器

--cache-chunk-total-size SizeSuffix

块可以在本地磁盘上占用的总大小

--transfers=N

并行文件数,默认为 4。在比较小的内存的 VPS 上建议调小这个参数,比如 128M 的小鸡上使用建议设置为 1。

--config string

指定配置文件路径,string 为配置文件路径

--ignore-errors

跳过错误

--size-only

根据文件大小校验,不校验 hash

--drive-server-side-across-configs

服务端对服务端传输

日志

rclone 有 4 个级别的日志记录,ERRORNOTICEINFODEBUG。默认情况下,rclone 将生成 ERRORNOTICE 级别消息。

  • -q - rclone 将仅生成 ERROR 消息。
  • -v - rclone 将生成 ERRORNOTICEINFO 消息,推荐此项
  • -vv - rclone 将生成 ERRORNOTICEINFODEBUG 消息。
  • --log-level LEVEL - 标志控制日志级别。

过滤

我们若同步的时候需要过滤掉一些不重要的文件的话,比如程序启动日志、敏感文件。

--exclude-from

排除文件或目录列表来自某个文件指定

--include-from

包含文件或目录来自某个文件指定

--filter-from

文件过滤规则来自某个文件指定

--exclude

排除文件或目录

--include

包含文件或目录

--filter

文件过滤规则,相当于上面两个选项的其它使用方式。包含规则以 + 开头,排除规则以 - 开头

文件类型过滤

比如 --exclude "*.bak",表示排除所有 .bak 结尾的文件,也可以写作 --filter "- *.bak"

比如 --include "*.{png,jpg}",包含所有 pngjpg 文件,排除其他文件,也可以写作 --filter "+ *.{png,jpg}"

--delete-excluded 删除排除的文件。需配合过滤参数使用,否则无效。

目录过滤

目录过滤需要在目录名称后面加上 /,否则会被当做文件进行匹配。以 / 开头只会匹配根目录(指定目录下),否则匹配所目录。这同样适用于文件。

--exclude ".git/" 排除所有目录下的.git 目录。

--exclude "/.git/" 只排除根目录下的.git 目录。

--exclude "{Video,Software}/" 排除所有目录下的 VideoSoftware 目录。

--exclude "/{Video,Software}/" 只排除根目录下的 VideoSoftware 目录。

--include "/{Video,Software}/**" 仅包含根目录下的 VideoSoftware 目录的所有内容。

大小过滤

默认大小单位为 kBytes ,但可以使用 kMG 后缀。

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

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

过滤规则来自某个文件

--exclude-from <规则文件> :从文件添加包含规则

--include-from <规则文件>:从文件添加删除规则

--filter-from <规则文件> :从文件添加包含 / 排除规则。比如 --filter-from filter-file.txt

filter-file.txt 示例:

- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- /dir/Trash

环境变量

rclone 中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除 -- 前缀,更改 -_,大写并添加前缀 RCLONE_环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值

比如设置最小上传大小 --min-size 50,使用环境变量是 RCLONE_MIN_SIZE=50。当环境变量设置后,在命令行中使用 --min-size 100,那么此时环境变量的值就会命令行覆盖,最终生效的是 --min-size 100

RCLONE_CONFIG

自定义配置文件路径

RCLONE_CONFIG_PASS

若 rclone 进行了加密设置,把此环境变量设置为密码,可自动解密配置文件

RCLONE_RETRIES

上传失败重试次数,默认 3 次

RCLONE_RETRIES_SLEEP

上传失败重试等待时间,默认禁用,单位 s、m、h 分别代表秒、分钟、小时

CLONE_TRANSFERS

并行上传文件数

RCLONE_CACHE_CHUNK_SIZE

块的大小

RCLONE_CACHE_CHUNK_TOTAL_SIZE

块可以在本地磁盘上占用的总大小

RCLONE_IGNORE_ERRORS=true

跳过错误

最佳实践

备份本地 /data/file 目录到腾讯云 cos 存储中,并设置定时任务每晚自动同步,这样可以达到定时备份重要文件上云的效果。

目录 /data/file 下创建 excludes.txt ,里面填写需要排除的文件列表。

配置腾讯云 cos 在此忽略,直接编写 rclone 命令,测试执行是否同步。

rclone sync -v /data/file tencent-cos:/beifen --exclude-from '/data/file/excludes.txt' >> /root/rclone.log 2>&1

手动执行一把,然后查看 tail -f /root/rclone.log 是否输出日志了,只要没报错则成功。

配置定时任务,每天自动执行

执行 crontab -e # 打开定时任务列表,跳到最后新起一行添加步骤 2. 成功的命令并保存,内容如下:(表示每晚 3 点 30 分进行同步)

30 4 * * * rclone sync -v /data/file tencent-cos:/beifen --exclude-from '/data/file/excludes.txt' >> /root/rclone.log 2>&1

执行systemctl restart cron.service 重启定时任务生效

达到执行时间后检查 /root/rclone.log 下的日志保证没问题。

总结

使用 Rclone 可以轻松实现备份同步文件到各大网盘,简化了备份方案,也可以用来迁移 2 个不同的网盘程序文件,甚至可以直接挂载网盘到本地用来扩充磁盘食用,更多的食用请详细参考官方文档。

参考链接

Rclone 官网 Rclone 进阶使用教程 - 常用命令参数详解

文章目录