Rclone 文档部分翻译

本贴最后更新于 1282 天前,其中的信息可能已经时移俗易

介绍

关于 rclone

Rclone 是一个用于管理云存储的命令行程序。它特性丰富,可作为的云服务提供商的 web 界面替代品。有超过 40 个云存储产品支持 rclone,包括 S3 对象存储、商用&个人云存储服务、和标准传输协议。

对于 Unix 命令例如 rsync、cp、mv、mount、ls、ncdu、tree、rm、cat,Rclone 有强大的等效命令。Rclone 的相似的语法也支持 shell 管道,并且有 --dry-run 保护选项。它可以以命令行使用、以脚本使用、以 API 使用。

用户们把 rclone 称作“云存储的瑞士军刀” 和 “来自魔法的无可替代的科技”

Rclone 可以看管好你的数据,它时刻保存时间戳并校验 checksums。在有限的带宽下传输;可以断续连接、或者配额对象可被重启,直到最后一个完好的文件被传输。你可以检查你文件的完整性。当可能的时候,rclone 会让服务端传输文件,以最小化从服务端一个位置移动到另一个位置所需的带宽,无需占用本地存储。

虚拟后台包装本地和云文件,用以 加密, 缓存, 分块合并.

Rclone 在 Windows、macOS、linux 、FreeBSD 上 挂载 任何本地、云、虚拟文件系统作为磁盘,并且能以 SFTP, HTTP, WebDAV, FTPDLNA 协议提供文件夹在线访问服务。

Rclone 是受 rsync 启发,用 go 语言编写的成熟、开源的软件。友好的社区熟悉各种用例。官方 Ubuntu、Debian、Fedora、Brew 、Chocolatey 仓库都有 rclone。如果想要最新版本,推荐从 downloading from rclone.org 下载。

Rclone 已在 Linux、Windows 、Mac 上被广泛使用。第三方开发者使用 rclone 命令行或 API 开发了创新性的备份、恢复、GUI、商用 进程解决方案。

Rclone 是一个可以干云存储交互重活的工具。

Rclone 可以为你做什么?

Rclone 可以帮你:

  • 备份(和加密)文件到云存储
  • 从云存储恢复(和解密)文件
  • 镜像云数据到另一个云服务,或者与本地存储协作
  • 迁移数据到云上,或者在不同云存储商之间
  • 挂载多个、加密的、缓存的或分开的云存储为一个磁盘
  • 使用 lsf,ljson,size,ncdu 分析和统计云上的数据
  • 统一文件系统,使多个本地或者云存储为展示一个盘

特性

  • 传输
    • 为了保证文件完整性,时刻校验 MD5, SHA1 哈希值
    • 在文件中保存时间戳
    • 操作可以在任何时刻重启
    • 可以在两个不同的云服务商间工作
    • 可以使用多线程下载到硬盘
  • Copy 复制新的或者更改了的文件到云存储
  • Sync 单向同步,使得两边相等
  • Move 将本地文件移动到云存储,并在校验完成后删除本地文件
  • Check 检查哈希值以查看有没有缺失或新增的文件
  • Mount 挂载云存储为磁盘
  • Serve 通过 HTTP/WebDav/FTP/SFTP/dlna 协议提供文件在线访问服务
  • 实验性的网页 GUI

支持的云服务

(其实还有许多服务商,基于例如 WebDAV or S3 的公用协议,就不在这里列出了)

相关链接

安装

安装

Rclone 是一个 go 程序,所以只有一个二进制可执行文件。

快速开始

  • 下载 相关的二进制文件
  • 从下载的压缩包提取出 rclone 或者 rclone.exe 二进制文件
  • 运行 rclone config 以配置。详情参照 rclone config docs

使用

配置

首先,你需要配置 rclone。因为对象存储系统的配置比较复杂,这些被放在了 config 文件中。(详情查看 --config 一节,以学习如何找到 config 文件并选择它的保存位置 )

最简单配置的的方法就是用 config 选项运行 rclone:

rclone config

查看下面的链接以获得详细的不同服务商的配置步骤:

用法

Rclone 将文件夹保持原来结构从一个存储系统系统同步到另一个系统。

它的语法类似于这样:

语法: [选项] 子命令 <参数> <参数...>

目标路径 都由你所给的【 config 文件中保存的存储系统名字加上子路径】指定,例如:“dirve:myfolder” 表示查看保存的 Google Drive 中的 myfolder 路径。

你可以在 config 文件中定义许多存储路径。

请在学习 rclone 的时候使用 -i / --interactive 标志以避免意外数据损失。

子命令

rclone 使用子命令系统,例如:

rclone ls remote:path ## 列出远程路径下的文件
rclone copy /local/path remote:path ## 复制 /local/path 到远程路径
rclone sync -i /local/path remote:path ## 同步 /local/path 到远程路径

主要的 rclone 命令(按最常使用的频率):

查阅 命令索引 以获得完整列表

复制单个文件

rclone 一般同步或复制文件夹,不过,如果 source 指向一个文件,rclone 会只复制这个文件。dest 必须指向一个文件夹 - 如果目标路径不是文件夹, rclone 会给出 Failed to create file system for "remote:file": is a file not a directory 的错误提示。

例如,假设你有一个远程地址 remote,其中有个文件叫 test.jpg ,然后你可以用下述命令复制:

rclone copy remote:test.jpg /tmp/download

T 文件 test.jpg 会补复制到 /tmp/download.

这也等同于当 /tmp/files 只包含下述这一个文件时

test.jpg

指定:

rclone copy --files-from /tmp/files remote: /tmp/download

我们的推荐当复制单个文件时使用 copy ,而不是 sync 。它们作用相似,不过 copy 会使用更少的内存。

远程路径的语法

输入 rclone 的远程路径语法如下:

/path/to/dir

这指向的是本地系统的路径

在 Windows 上只有本地路径才可以用 \ 代替 / ,非本地路径必须使用 /

这些路径不必要在开头加上 / - 如果没有 / 的话表示的是当前路径的相对路径

remote:path/to/dir

这表示 config 文件中定义(使用 rclone config 定义)的 remote: 上的 path/to/dir 路径

remote:/path/to/dir

在大多数后端这等同于 remote:path/to/dir 并且这种形势更受推荐。在极少数的远程系统(ftp、sftp、dropbox 商用版)上这会指向一个不同的路径。在这些系统上,开头没有 / 的路径一指向 “home” 路径,而加上 / 则表示根目录。

:backend:path/to/dir

这是创建远程路径的一种高级形式。backend 应当是后端(config 文件中的 type)的名称或前缀,所有的后端配置都应该被提供在命令行(或者环境变量中)中。

例如:

rclone lsd --http-url https://pub.rclone.org :http:

要列出 https://pub.rclone.org/ 根目录下的所有文件夹。

rclone lsf --http-url https://example.com :http:path/to/dir

要列出 https://example.com/path/to/dir/ 目录下的所有文件夹和文件。

rclone copy --http-url https://example.com :http:path/to/dir /tmp/dir

要复制 https://example.com/path/to/dir/ 目录下的所有文件夹和文件到 /tmp/dir

rclone copy --sftp-host example.com :sftp:path/to/dir /tmp/dir

要使用 sftp 从 example.com 的相对路径 path/to/dir 下复制文件和文件夹到 /tmp/dir

有效的 remote 名字

  • remote 名字只可以包含 0-9A-Za-z_- 和空格
  • remote 名字不能以 - 开头

引用和 shell

当你在电脑上输入命令的时候,你是在 shell 中使用命令行。这以操作系统特定的方式解释各种字符。

这里要讲一些陷阱,以帮助不熟悉 shell 规则的用户

Linux / OSX

如果你输入的名字包含空格或 shell 元字符(例如 *, ?, $, ', " 等),则必须用单引号将其引起来。默认使用单引号 '

rclone copy 'Important files?' remote:backup

如果要发送 ' ,则需要使用 " ,例如

rclone copy "O'Reilly Reviews" remote:backup

引用元字符的规则很复杂,如果您需要完整的详细信息,则必须查阅 Shell 的手册页。

Windows

如果您的名字中有空格,则需要将其放在 " 中,例如

rclone copy "E:\folder name\folder name\folder name" remote:backup

如果单独使用根目录,则不要引用该根目录(有关原因,请参见 #464 ),例如:

rclone copy E:\ remote:backup

复制名称中带有 : 的文件或目录

rclone 使用 : 标记一个 remote 名称。但是,这是非 Windows 操作系统中的有效文件名组件之一。远程名称解析器只会搜索直到第一个 / ,因此,如果您需要对这样的文件或目录执行操作,请使用以 / 开头的完整路径,或使用 ./ 作为当前目录的前缀。

因此,要将名为 sync:me 的目录同步到名为 remote: 的远程目录,请使用

rclone sync -i ./sync:me remote:path

或者

rclone sync -i /full/path/to/sync:me remote:path

服务器端复制

大多数远程服务器(但不是全部-请参阅 [概述])支持服务器端复制。

这意味着,如果您要将一个文件夹复制到另一个文件夹,rclone 不会下载所有文件再重新上传它们;rclone 将指示服务器将它们复制到位。

例如

rclone copy s3:oldbucket s3:newbucket

oldbucket 的内容复制到 newbucket 而无需下载并重新上传。

当服务器不支持服务器端复制时,rclone 会下载并重新上传。

服务器端复制会被 synccopy 使用,并且在使用 -v 标志时将在日志中区分出来。如果服务器端不支持直接移动,move 命令也会使用服务器端复制功能,这是通过发送服务器端复制命令,然后删除原来文件来完成的,这样比下载和重新上传要快得多。

仅当 remote 名称相同时,才尝试服务器端复制。

此功能可以被用在编写脚本,进行高效地进行备份时。例如

rclone sync -i remote:current-backup remote:previous-backup
rclone sync -i /path/to/files remote:current-backup

通用选项

Rclone 有许多选项可以控制其行为。

带有参数的选项可以通过两种方式传递值: --option=value--option value ,但是,布尔(true / false)选项的行为与其他选项略有不同,因为 --boolean 会将选项设置为 true,而没有该选项时,则将其设置为 false,也可以指定 --boolean=false--boolean=true ,请注意,--boolean false 无效 - 这将会被解析为 --booleanfalse 两个额外的命令行参数。

使用 TIME 的选项,使用 go time 解析器解析。例如 300ms-1.5h2h45m,有效的单位有:nsus ( µs )、mssmh

使用 SIZE 的选项默认用 kByte,可以用 b, k, M, G, T, P 后缀。

--backup-dir=DIR

使用 copysyncmove 时,任何补覆盖、删除的文件会被移到这个文件夹并保持它的层级结构。

如果设了 --suffix ,那么被移动的文件会加上这个后缀。如果有相同路径的文件,那么会覆盖掉。

例如:

rclone sync /path/to/local remote:current --backup-dir remote:old

会同步 /path/to/localremote:current ,但任何被更新或删除的文件会被移动到 remote:old

如果你从一个脚本运行 rclone,或许你想将今天的日期作为 --backup-dir 文件夹的名字,用于存储旧文件,或者你想将今天的日期传递到 --suffix 选项。

详见 --compare-dest--copy-dest

--bind string

向外连接时,绑定的本地 ip 。可以是 ipv4 地址 (1.2.3.4) 、ipv6 地址 (1234::789A) 、域名地址。如果域名无法被解析,或者解析出多个 ip,那会返回错误。

--bwlimit=BANDWIDTH_SPEC

控制带宽。两种方式:一个限制、时间表。默认是 0,表示没有限制。

--bwlimit 10M
--bwlimit "08:00,512 12:00,10M 13:00,512 18:00,30M 23:00,off"
--bwlimit "Mon-00:00,512 Fri-23:59,10M Sat-10:00,1M Sun-20:00,off"

列出文件不受带宽限制选项影响。

这里的单位是 Byte/s,不是 bit/s。

--bwlimit-file=BANDWIDTH_SPEC

--buffer-size=SIZE

每个 --transfer 用多少内存来缓冲

--check-first

--checkers=N

同步运行多少个比较任务。默认是 8

-c, --checksum

只用文件大小来判断是否是同一个文件。

--compare-dest=DIR

使用 sync, copy, move 时,将 DIR 中的文件向 dest 中的文件比较每个文件,如果有的文件相同,就不复制。

用 sync 时,必须使用与 dest 相同的 remote 。比较路径不能与目标路径重叠。

--config=CONFIG_FILE

一般配置文件在 home 路径下的 .config/rclone/rclone.conf 中,当 $XDG_CONFIG_HOME 被设置时,路径变为 $XDG_CONFIG_HOME/rclone/rclone.conf

如果执行 rclone 的目录下有个 rclone.conf 文件,会优先用它。

运行 rclone config file 可以看到默认配置文件在哪里。

--contimeout=TIME

设置连接 timeout。

5s 10m 3h30m

默认是 1min 。

如果超过 timeout 还没得到服务器响应, 就会认为无法连接。

--copy-dest=DIR

使用 sync, copy, move 时,将 DIR 中的文件向 dest 中的文件比较每个文件,如果有的文件相同,就在服务端将文件从 DIR 复制到 dest。对增量备份有用。

--dedupe-mode MODE

dedupe 命令下用。可选 interactive, skip, first, newest, oldest, rename 。默认是 interactive

--disable FEATURE,FEATURE,…

例如:

--disable move,copy

查询:

--disable help

debug 用的

-n, --dry-run

尝试运行一下,但不做出任何实质性修改,用来看一下,rclone 都会做哪些动作。对 sync 的检查很有用。

--expect-continue-timeout=TIME

当 request 有 “Expect: 100-continue” header 时,指定完全写 request header 后,等服务器的第一个 response header 的等待时间。

--ignore-case-sync

忽略文件名的大小写。

--ignore-checksum

忽略比较文件数量来判断是否传输出了问题。一般若出问题时,会提示: “corrupted on transfer”

--ignore-existing

跳过所有已存在的目标文件

--ignore-size

忽略比较文件大小来判断是不是不同的文件。

-I, --ignore-times

不管目标文件是什么状态,都上传所有文件。

--immutable

当 source 和 destination 文件都是不可修改的。只新建和删除。如果两个文件不匹配,会出错: Source and destination exist but do not match: immutable file modified.

--leave-root

rmdirs 时,不删除根目录。

--log-file=FILE

将日志输出到 FILE

--log-format LIST

可配置项: date, time, microseconds, longfile, shortfile, UTC. 默认是 “date,time”.

--log-level LEVEL

DEBUG 等同于 -vv

INFO 等同于 -v

NOTICE 默认

ERROR 等同于 -q

--use-json-log

用 json 格式的 log

--low-level-retries NUMBER

--max-backlog=N

--max-delete=N

限制删除文件的最大数量

--max-depth=N

递归层级。(对 purge 无效)

例如 rclone --max-depth 1 ls remote:path 只会列出第一层级的文件。

历史遗留原因, lsd 默认用 --max-depth 1

--max-duration=TIME

超过指定时间,停止 schedule

--max-transfer=SIZE

--modify-window=TIME

当检查一个文件是否被修改过,这是允许的最大的时间差。

默认是 1ns 。对 os x 是 1s

--multi-thread-cutoff=SIZE

如果下载的文件到本地后台大于这个大小,用多线程下载。默认是 250M

只对目标是本地时有用。

--multi-thread-streams=N

多线程时,线程的最大数量。默认是 4。

--no-check-dest

不检查 destination 。会有以下效果:

  • 目标文件不被列出,最少使用 api
  • 文件总会被传输
  • 在允许的云盘上,会产生重复文件
  • 推荐使用 --retries 1 ,否则失败时,需要重新传输所有文件。

--no-gzip-encoding

--no-traverse

--no-update-modtime

--order-by string

控制文件处理顺序,类别有:

  • size
  • name
  • modtime

可以在逗号后附加的方法有:

  • ascending 或 asc
  • descending 或 desc

默认方法是 ascending

例子:

  • --order-by size,desc
  • --order-by modtime,ascending

当然有一点点局限和例外,先不译了

--password-command SpaceSepList

-P, --progress

提供上传和下载进度。每 500ms 更新一次

-q, --quiet

尽可能不做输出

--retries int

重试次数。默认是 3。设为 1 即为禁用。

--retries-sleep=TIME

重试前的等待时间。默认是 0

--size-only

只检查大小。不检查时间。

--stats=TIME

--stats-file-name-length integer

--stats-log-level string

--stats-one-line

--stats-one-line-date

--stats-one-line-date-format

--stats-unit=bits|bytes

--suffix=SUFFIX

用 sync, copy, move 时,将任何本来要被覆盖或删除的文件添加一个后缀。

与 --backup-dir 搭配使用

--suffix-keep-extension

用 --suffix=SUFFIX 时,保持后缀名。

--syslog

--syslog-facility string

--tpslimit float

--tpslimit-burst int

--track-renames

默认使用 sync 时,如果你在本地重命名了一个文件, rclone 会先删除远程文件,再上传新文件。

用上这个,就可以追踪重命名的文件。

用 size 和 hash 来匹配。

与 --no-traverse 不兼容

与 --delete-before 不兼容

--delete-(before,during,after)

决定同步时,远程的多余文件是在上传的什么阶段被删掉的。默认是 after

--fast-list

--timeout=TIME

如果 idle 超过指定时间,认为连接中断

--transfers=N

最大同步传输的文件数量。默认是 4

-u, --update

跳过远程修改时间比本地还新的文件。

--use-mmap

--use-server-modtime

-v, -vv, --verbose

-V, --version

打印版本

SSL/TLS 选项

--ca-cert string

--client-cert string

--client-key string

--no-check-certificate=true/false

配置文件加密

你的配置文件包含了网盘的登陆信息,也就是说,需要保证 .rclone.conf 的安全。

如果你的工作环境不是安全的,你可以给你的配置文件加密

每次要用这个 config 文件时都要输入密码

执行 rclone config

>rclone config
Current remotes:

e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q>

跳转 s

e/n/d/s/q> s
Your configuration is not encrypted.
If you add a password, you will protect your login information to cloud services.
a) Add Password
q) Quit to main menu

a

a/q> a
Enter NEW configuration password:
password:
Confirm NEW password:
password:
Password set
Your configuration is encrypted.

如果丢失密码,就永远无法找回里面的数据。

使用 XSalsa20 和 Poly1305 加密和验证。

如果你的环境是安全的,你可以设置 RCLONE_CONFIG_PASS 环境变量为你的密码,就不用每次都输密码了。

你可以写这样一个脚本保存为 set-rclone-password

#!/bin/echo Source this file don't run it

read -s RCLONE_CONFIG_PASS
export RCLONE_CONFIG_PASS

之后只要运行 source set-rclone-password 再设置密码,就可以把密码写进环境变量。

开发者选项

--cpuprofile=FILE

--dump flag,flag,flag
--dump headers
--dump bodies
--dump requests
--dump responses
--dump auth
--dump filters
--dump goroutines
--dump openfiles

--memprofile=FILE

过滤器

可用:

  • --delete-excluded
  • --filter
  • --filter-from
  • --exclude
  • --exclude-from
  • --include
  • --include-from
  • --files-from
  • --min-size
  • --max-size
  • --min-age
  • --max-age
  • --dump filters

详见 过滤章节.

远程控制

如果要查看如何远程控制:

  • --rc
  • 任何开头带 --rc- 的命令

参见 远程控制章节.

日志

退出码

退出码如下:

  • 0 - 成功
  • 1 - 语法或语法错误
  • 2 - 无法归类的错误
  • 3 - 没找到文件夹
  • 4 - 没找到文件
  • 5 - 临时性错误 (多试几次可能会解决) (重新尝试可解决的错误)
  • 6 - 不是太严重了,错误 (例如 dropbox 的 461 错误) (重新尝试也无法解决的错误)
  • 7 - 致命错误 (多次尝试也无法解决,例如账户被停用) (致命错误)
  • 8 - 传输超限 - 由 --max-transfer 设置的限制达到了
  • 9 - 操作成功,但是没有文件被传输

环境变量

rclone 可以被环境变量控制配置。你可以用环境变量来设置一些选项的默认值。

选项

每个选项都可以由环境变量设定默认值

要找到环境变量的名字,首先,取选项的完整名字,这样开头的两个减号去掉,将 - 改为 _,将所有小写变为大写,在开头加上 RCLONE_

例如,要设置 --stats 5s,就设置环境变量 RCLONE_STATS=5s

又或者要设置磁盘使用回收站,就设置 RCLONE_DRIVE_USE_TRASH=true

配置文件

你可以在配置文件中的单个 remote 基础上,为其值设置默认值。

如果要使用此功能,则需要找到所需的配置项的名称。

最简单的方法是手动运行 rclone config,然后在配置文件中查看值是什么(可以通过查看 rclone help 中的 --config 帮助来找到该配置文件)

要找到环境变量的名称,您需要进行设置,将 RCLONE_CONFIG_ + remote 的名称 + _ + 配置文件中的选项的名称(大写)。

例如,要在不带配置文件的情况下配置名为 mys3: 的 S3 远程服务器(使用设置环境变量的 unix 方式):

$ export RCLONE_CONFIG_MYS3_TYPE=s3
$ export RCLONE_CONFIG_MYS3_ACCESS_KEY_ID=XXX
$ export RCLONE_CONFIG_MYS3_SECRET_ACCESS_KEY=XXX
$ rclone lsd MYS3:
          -1 2016-09-21 12:54:21        -1 my-bucket
$ rclone listremotes | grep mys3
mys3:

注意,如果你想通过创建变量的方式创建一个 remote ,就必须用上述方式创建 ..._TYPE 变量。

优先权

后端配置的各种不同方法会以下述顺序读取,并且第一人有效值会被最终采用:

  • 命令行中提供的值,例如 --drive-use-trash
  • 特定于 remote 的环境变量,例如 RCLONE_CONFIG_MYREMOTE_USE_TRASH(请参见上文)。
  • 特定于后端的环境变量,例如 RCLONE_DRIVE_USE_TRASH
  • 配置文件,例如 use_trash = false
  • 默认值,例如 true - 这个值无法更改

因此,如果在配置文件中同时提供了“ --drive-use-trash”,并且设置了环境变量“ RCLONE_DRIVE_USE_TRASH”,则命令行标志将优先。

对于非后端配置,顺序如下:

  • 命令行中提供的值,例如 --stats 5s
  • 环境变量,例如 RCLONE_STATS=5s
  • 默认值,例如 1m - 这个值无法更改。

其他环境变量

  • RCLONE_CONFIG_PASS 设置你的配置文件的访问密码 (详情见配置文件加密 )
  • HTTP_PROXYHTTPS_PROXYNO_PROXY (或者这些项的小写).
    • 在 https 请求上 HTTPS_PROXY 相对于 HTTP_PROXY 有更高优先权
    • 环境变量值可以是一个完整的 URL 或者 host[:port] (当使用 http 时)
  • RCLONE_CONFIG_DIR - rclone 在子进程中设置 此变量,指向保存配置文件的目录,以便使用 config 文件。

GUI(实验性)

Rclone 可以提供基于 Web 的 GUI(图形用户界面)。目前这还处于实验阶段,因此情况可能会发生变化。

在终端中运行此命令,rclone 将下载,然后在 Web 浏览器中显示 GUI:

rclone rcd --rc-web-gui

这将产生这样的日志,并且为了服务 GUI,rclone 需要继续运行:

2019/08/25 11:40:14 NOTICE: A new release for gui is present at https://github.com/rclone/rclone-webui-react/releases/download/v0.0.6/currentbuild.zip
2019/08/25 11:40:14 NOTICE: Downloading webgui binary. Please wait. [Size: 3813937, Path :  /home/USER/.cache/rclone/webgui/v0.0.6.zip]
2019/08/25 11:40:16 NOTICE: Unzipping
2019/08/25 11:40:16 NOTICE: Serving remote control on http://127.0.0.1:5572/

假设您正在计算机上本地运行 rclone,你可以将 rclone 和 GUI 分开运行 - 有关详细信息,请参见下文。

如果您希望检查更新,则可以在命令行中添加 --rc-web-gui-update

如果发现 GUI 损坏,则可以通过添加 --rc-web-gui-force-update 来强制更新。

默认情况下,rclone 将打开您的浏览器。添加 --rc-web-gui-no-open-browser 以禁用此功能。

使用 GUI

GUI 打开后,您将看到具有总体概述的仪表板。

在左侧,您将看到一系列查看按钮,您可以单击以下按钮:

  • Dashboard - 主要概述
  • Configs - 检查和创建新配置
  • Explorer - 查看、下载文件,和上传文件到云存储系统
  • Backend - 查看或更改后端配置
  • Log out

(更多文档和入门视频即将发布!)

它是怎么工作的?

当你运行 rclone rcd --rc-web-gui 之后会发生这些事:

  • rclone 开始运行,但只运行远程控制 API ("rc")
  • API 绑定到了本地地址,并有一个自动生成的用户名和密码。
  • 如果 api 包缺失,那么 rclone 就会下载它
  • rclone 会从 api 包通过 api 的相同端口开始服务文件
  • rclone 会打开浏览器并使用 login_token 所以它会直接登陆进去

高级用法

rclone rcd 可以使用任何 rc page 中记录的选项

选项 --rc-web-gui 是下述的简写:

  • 如果需要的话就下载 web GUI
  • 检查验证
  • --rc-user gui
  • --rc-pass <random password>
  • --rc-serve

这些选项可以被强制覆盖

另外请参考 rclone rcd documentation.

例子: 运行一个公共 GUI

例如使用以下选项, GUI 可以通过 ssl 使用 htpasswd 文件在一个公共端口上服务:

  • --rc-web-gui
  • --rc-addr :443
  • --rc-htpasswd /path/to/htpasswd
  • --rc-cert /path/to/ssl.crt
  • --rc-key /path/to/ssl.key

例子: 在代理之后运行一个公共 GUI

如果你想在一个位于 /rclone 的代理之后运行 GUI ,你可以设置以下选项:

  • --rc-web-gui
  • --rc-baseurl rclone
  • --rc-htpasswd /path/to/htpasswd

或者不是用 htpasswd,你只是想单个用户和密码地使用:

  • --rc-user me
  • --rc-pass mypassword

项目

开发地址: rclone/rclone-webui-react repository.

欢迎反馈和贡献 :-)

如果有任何问题可以到这里提问: rclone forum.

笔记

我在使用 rclone rcd --rc-web-gui 时会遇到无法读取和添加 config 的问题,所以手动运行 GUI。

首先,到 rclone/rclone-webui-react 下载最新的 release,解压,得到网站文件夹。

然后运行如下命令:

rclone rcd "D:\Users\Haujet\Desktop\build" --rc-user gui --rc-pass pass

这表示:运行远程控制,对 D:\Users\Haujet\Desktop\build 下的 web-gui 提供服务,登陆用户名 gui,登陆密码 pass

Rclone 命令

总览

这是 rclone 中所有命令的索引。运行 rclone --help 可以查看该命令的帮助:

命令 描述
rclone 显示 rclone 的命令、选项、后端
rclone about 获得 remote 的详情信息(例如使用量)
rclone authorize remote 授权
rclone backend 运行特定于后端的命令
rclone cat 连接任意文件,并送到标准输出
rclone check 检查 source 和 remote 文件是否相同
rclone cleanup 如果可以,清空 remote
rclone config 进入交互式配置程序
rclone config create 用名字、类型、选项,创建一个新的 remote
rclone config delete 删除一个已存在的 remote name.
rclone config disconnect 从 remote 断开用户连接
rclone config dump 将配置文件以 JSON 输出
rclone config edit 进入交互式配置页面
rclone config file 显示配置文件地址
rclone config password 更新已存在的 remote 的密码
rclone config providers 以 json 形式列出所有的服务商和选项
rclone config reconnect 重新对 remote 授权
rclone config show 打印配置文件或配置文件中的一个 remote
rclone config update 更新一个已存在的 remote 的选项
rclone config userinfo 打印 remote 的已登录的用户信息
rclone copy 将文件从 source 复制到 dest,跳过已复制的文件
rclone copyto 将文件从 source 复制到 dest,跳过已复制的文件
rclone copyurl 将 url 文件复制到 dest
rclone cryptcheck 检查已加密 remote 的完整性
rclone cryptdecode 返回未加密的文件名
rclone dedupe 交互性的找到重复的文件名,然后删除或重命名他们
rclone delete 删除一个目录下的内容
rclone deletefile 删除 remote 的单个文件
rclone genautocomplete 为一个给定的 shell 输出完成脚本
rclone genautocomplete bash 输出 rclone 的 bash 完成脚本
rclone genautocomplete fish 输出 rclone 的 fish 完成脚本
rclone genautocomplete zsh 输出 rclone 的 zsh 完成脚本
rclone gendocs 为 rclone 输出 markdown 形式的文档到指定目录
rclone hashsum 为指定目录的所有对象生成一个 hashsum 文件
rclone link 生成指向文件或文件夹的公共链接
rclone listremotes 列出配置文件中所有的 remote
rclone ls 列出指定目录中所有的对象以及其目录、大小
rclone lsd 列出目录中所有的文件夹、容器、桶
rclone lsf 以 remote:path 的格式列出文件夹内所有的对象
rclone lsjson 以 json 的格式列出文件夹内所有的对象
rclone lsl 将指定文件夹内的所有对象的修改时间、大小、路径一并列出
rclone md5sum 为指定目录的所有对象生成一个 md5sum 文件
rclone mkdir 如果路径不存在,则创建这个路径
rclone mount 在一个挂载点,将远程路径挂载为文件系统
rclone move 将文件从 source 移动到 dest
rclone moveto 将文件或文件夹从 source 移动到 dest
rclone ncdu 用一个基于文本的交互界面浏览 remote
rclone obscure 将 rclone.conf 中存储的密码变为 base64 格式
rclone purge 删除路径和它包含的文件
rclone rc 对正在运行的 rclone 运行一个命令
rclone rcat 复制标准输出到 remote 的一个文件
rclone rcd 运行 rclone,但只接收远程控制命令
rclone rmdir 如果目录为空则移除
rclone rmdirs 移除该目录下的所有空文件夹
rclone serve 用指定的协议搭建一个 remote 服务器
rclone serve dlna 通过 DLNA 协议搭建一个可访问的服务器指向 remote:path
rclone serve ftp 通过 ftp 协议搭建一个可访问的服务器指向 remote:path
rclone serve http 通过 http 协议搭建一个可访问的服务器指向 remote:path
rclone serve restic 为了 restic's REST API 搭建一个可访问的服务器指向 remote
rclone serve sftp 通过 sftp 协议搭建一个可访问的服务器指向 remote
rclone serve webdav 通过 webdav 协议搭建一个可访问的服务器指向 remote
rclone settier 改变 remote 的对象的存储类
rclone sha1sum 为指定目录的所有对象生成一个 sha1sum 文件
rclone size 打印目标路径的所有对象的总数量和总大小
rclone sync 将 source 同步到 dest,只改动 dest 的文件
rclone touch 创建一个新文件或改变文件的修改时间
rclone tree 用文件数的形式列出远程路径所有文件
rclone version 显示版本号

rclone mount

这里说下,在 windows 上挂载需要安装 winfsp

https://github.com/billziss-gh/winfsp/releases/download/v1.7B1/winfsp-1.7.20038.msi
rclone mount OneDrive:/ H: –cache-dir E:\OneDrive –vfs-cache-mode writes

在一个挂载点,将远程路径挂载为文件系统

概要

rclone mount 允许 Linux、FreeBSD、macOS 和 Windows 使用 FUSE 将任何 Rclone 的云存储系统挂载为文件系统。

首先使用 rclone config 设置你的 remote。使用 rclone ls 等命令检查是否配置正确。

你可以用前台模式或后台(守护进程)模式运行挂载。挂载默认以前台模式运行,使用 --daemon 选项以指定它用后台模式运行。后台模式只支持 Linux 和 OSX,在 Windows 上只能运行前台模式。

在 Linux/macOS/FreeBSD 上,要确保 /path/to/local/mount 是一个已存在的空文件夹:

rclone mount remote:path/to/files /path/to/local/mount

或者在 Windows 上,要确保 X: 是一个未使用的盘符或者一个不存在的路径:

rclone mount remote:path/to/files X:
rclone mount remote:path/to/files C:\path\to\nonexistent\directory

当运行在后台模式时,用户需要手动停止挂载(见下文)

当程序在前台模式被结束,挂载会自动停止

挂载操作有可能失败,例如挂载点正忙。当这个发生时,用户就有责任手动停止挂载。

手动停止挂载:

## Linux
fusermount -u /path/to/local/mount
## OS X
umount /path/to/local/mount

注意:从 rclone 1.52.2 开始,rclone mount 现在在某些平台上需要 Go 1.13 以上的版本,取决于所需的 FUSE 库。

在 Windwos 上安装

要在 Windows 上运行 rclone mount,你需要下载和安装 WinFsp

WinFsp 是一个开源的 Windows 文件系统代理,可以让 Windows 轻松地写用户层文件系统。它提供 FUSE 模拟层,rclone 同时使用后者与 cgofuse。两个包由 Bill Zissimopoulos 所写,他也给 rclone 在 Windows 上的 mount 的实现提供了莫大的帮助。

Windows 警告

注意,Administrator 创建的新盘对其它用户是不可见的(包括被提升为管理员权限的用户)。所以如果你以管理员命令行启动了一个 Windows Drive,然后从 Explorer 访问,是看不见这个磁盘的。

最简单的方法是以普通用户的 cmd 窗口运行启动这块盘。或者从 SYSTEM 用户启动(使用 the WinFsp.Launcher infrastructure ),这会创建每个人都有访问权的 Drive,或者你也可以使用 the nssm service manager

挂载为网络磁盘

默认,rclone 会将 remote 挂载为普通磁盘。不过,你也可以将它挂载为网络磁盘。

不像其它系统,Windows 为网络磁盘提供一种不同的文件系统类型,Windows 和其它程序对待网络磁盘普通磁盘时会有所不同:在网络磁盘中,许多 I/O 操作会被优化,因为考虑到了网络所带来的高延迟和低稳定性。

虽然许多人更偏好让网络硬盘以普通硬盘的形式挂载,但这可能引起问题。例如:程序在 Explorer 中对挂载的 remote 执行操作时无法正常运行、卡住、发生错误。如果你经历过这些,那么请考虑将 rclone remotes 挂载为网络磁盘,因为 Windows 认为普通磁盘应当速度快并且稳定,而网络磁盘就远远不行。详情查看 限制 一节。

mount 后添加 --fuse-flag --VolumePrefix=\server\share 选项,如果你挂载了多个 remote 的话,将 share 替换为其它的名字,否则挂载点会发生冲突,你的挂载文件系统会重叠。

阅读更多关于磁盘映射的信息

限制

如果没有使用 --vfs-cache-mode,那么就只能顺序写入,只能在读取的时候查找。这就意味当文件在 rclone mount 上,又没有 --vfs-cache-mode writes--vfs-cache-mode full 着许多应用无法工作,详见 文件缓存

基于 bucket 的 remote (例如 swift、 S3、 google 计算存储、 B2、 Hubic)不支持空文件夹的概念,所以如果空文件夹在缓存中被清除,那么就会清空。

目前只支持 Linux, FreeBSD, OS X and Windows

rclone mount 相较于 rclone sync/copy

文件系统期待百分百稳定,但是云存储远没有这样稳定。rclone sync/copy 执行时会多次尝试。但是 rclone mount 在进行本地复制和上传时无法以相同的方式重试。查阅 文件缓存 以获得更多。

属性缓存

你可以使用 --attr-timeout 属性设置内核缓存文件夹属性(大小、修改时间)的时间。

默认是 1s,可以避免内核给 rclone 太多的 callback。

理论上,对于文件系统,0s 是可以在内核的控制外修改的最正确的数值。不过这会引起不少问题,如 rclone 占用太多内存, rclone not serving files to samba列出文件夹占用太多时间

内核可以缓存文件信息持续 --attr-timeout 指定的时间。在这个窗口,如果远程文件改变长度,你可能会见到崩溃。它会最终以截断文件或者垃圾文件显示。使用 --attr-timeout 1s 不太可能会发生(也不一定就不发生)。你设置的 --attr-timeout 越高,就越有可能发生。所以 1s 是最佳的数值了。

如果你设置比较高(10s 或者 1m),那么内核会更少地给 rclone callback,会更高效,但也更有可能崩溃。

If files don't change on the remote outside of the control of rclone then there is no chance of corruption.

This is the same as setting the attr_timeout option in mount.fuse.

过滤器

提醒下,rclone 过滤器也可以用在挂载点可见文件的子集上。

systemd

当让 rclone 作为 systemd service 运行时,可以使用 Type=notify。这时,在挂载点被成功配置之后 service 会进行启动状态。在这个模式下,拥有 rclone mount service 的 units 会立即看见所有文件和文件夹。

分块读取

--vfs-read-chunk-size 会启用从 source 分块读取文件,对于某些 remote,通过递增的次序的请求,对于某些 remote,可以减少使用的下载配额。

--vfs-read-chunk-size-limit 被指定,并且比 --vfs-read-chunk-size 大,那么每个打开的文件的 chunk size 会增倍,直到达到指定的数值。 -1 会禁用这个限制,chunk size 会无限增长。

如果设置了 --vfs-read-chunk-size--vfs-read-chunk-size-limit 0 ,接下来的部分就会被下载:0-100M, 100M-200M, 200M-300M, 300M-400M and so on。当指定了 --vfs-read-chunk-size-limit 500M,那么结果 就是:0-100M, 100M-300M, 300M-700M, 700M-1200M, 1200M-1700M and so on

只有在 --vfs-cache-mode < full 时才会开始,因为如果设置了 --vfs-cache-mode full ,那么文件就总是会在打开之间被复制到 vfs 缓存。

VFS - 虚拟文件系统(Virtual File System)

这个命令使用了 VFS 层,这将 rclone 使用的云存储系统对象转换为像是磁盘文件系统的系统。

云存储对象有许多与磁盘文件不一样的属性 - 你无法扩展它们,也无法在中间增添内容,所以要用 VFS 层来处理它。因为至今没有一个所谓正确的方法,所以有了许多选项(如下所述)

VFS 层也使用了文件夹缓存 - 缓存文件和文件夹信息(不包含数据)在内存中。

VFS 文件夹缓存

使用 --dir-cache-time 选项,你可以控制后台文件夹应该多长时间刷新和不要刷新,通过挂载做的更改会立刻出现或者使缓存无效

--dir-cache-time duration   缓存文件夹目录的时间 (默认是 5m0s)
--poll-interval duration    拉取变化之间等待的时间

不过,在云端存储、网页交互界面、另外一个 rclone 上发生的更改,只有在文件夹缓存被清空后才会更新,如果后端支持拉取,在拉取时间段之内会完成变动的更新。

你可以发送一个 SIGHUP 信号给 rclone,让他清空文件夹缓存,不管已等了多长时间。假设只有一个 rclone 正在运行,你可以这样重置缓存:

kill -SIGHUP $(pidof rclone)

如果你设置了 rclone 的 远程控制 ,那么你可以使用 rclone rc 更新整个文件夹缓存:

rclone rc vfs/forget

或者单个文件、文件夹:

rclone rc vfs/forget file=path/to/file dir=path/to/dir

VFS 文件缓冲

--buffer-size 决定了用多少内存提前缓冲数据。

每个打开的文件总会尽量保存一定量的数据在内存中,这部分缓存的数据会与打开的文件绑定,并且不会被分享。

这个选项是每个打开的文件可占用内存的上限,这个缓冲只会将内存用于下载完成但是还没有被读取的数据,如果缓冲为空,那么只会用一点点内存。

rclone 用于缓冲所使用的最大的内存取决于 --buffer-size * open files

VFS 文件缓存

这些选项控制了 VFS 文件缓存。为了使 vfs 层与普通文件系统兼容,文件缓存就是必要的。以一些兼容性为代价,可以将这个选项关掉。

例如,如果你想要同时读取和写入一个文件,也就需要启用 vfs 缓存。详见下文。

注意 vfs 缓存与后端缓存是区别开的,有时候你可能发现需要一个、另一个,或者两者。

--cache-dir string                   用作rclone缓存的文件夹
--vfs-cache-mode CacheMode           缓存模式 off|minimal|writes|full (默认是 off)
--vfs-cache-max-age duration         文件在缓存中的最长时间. (默认是 1h0m0s)
--vfs-cache-max-size SizeSuffix      缓存文件夹的最大总大小. (默认是 off)
--vfs-cache-poll-interval duration   拉取旧对象的时间间隔. (默认是 1m0s)
--vfs-write-back duration            当使用缓存时在使用文件后回写文件的间隔. (默认是 5s)

如果运行 rclone 时带上 -vv ,那么就会打印出文件缓存的位置。文件被存储在用户缓存文件区域,这是由系统定义的,不过可以被 --cache-dir 控制,或者设置环境变量修改。

缓存有 4 种模式,模式越高,兼容性越强,占用空间越大

注意文件只有在被关闭后等待了 --vfs-write-back 定义的时间后没有被访问时,才会写回远程端。

如果使用了 --vfs-cache-max-size,那么在两种情况下,缓存会超过这个大小:首先是只有每间隔 --vfs-cache-poll-interval 时间才会检查,其次是已打开的文件无法被清除。

--vfs-cache-mode off

这是默认模式,在这种模式下,软件会直接读写远程文件,这就意味着有些操作无法进行:

  • 打开文件时无法同时读取和写入
  • 写入模式打开的文件无法被查找
  • 要以写权限打开的已存在的文件需要有 O_TRUNC
  • 要以读权限打开的已存在的有 O_TRUNC 的文件只能以写权限打开
  • 只有当文件支持 O_TRUNC 才能打开文件写入
  • 文件打开模式 O_APPEND, O_TRUNC 不被支持,会忽略
  • 如果上传失败,则无法重试
--vfs-cache-mode minimal

This is very similar to "off" except that files opened for read AND write will be buffered to disk. This means that files opened for write will be a lot more compatible, but uses the minimal disk space.

These operations are not possible

  • 写入模式打开的文件无法被查找
  • 要以写权限打开的已存在的文件需要有 O_TRUNC
  • 文件打开模式 O_APPEND, O_TRUNC 不被支持,会忽略
  • 如果上传失败,则无法重试
--vfs-cache-mode writes

这种模式下打开文件读取时,仍然是直接从远端读取,写入文件会先被缓存到磁盘。

这个模式应该支持所有正常的文件系统操作。

如果上传失败,他会在试验性的递增间隔最大达到 1 分钟进行重试。

--vfs-cache-mode full

在这个模式下,读写操作都被缓存到本地磁盘,读取远程文件也会被写入到缓存。

在这个模式下,缓存中的文件是稀散文件,rclone 会追踪每一份他下载的文件

所以如果应用只读取文件的开头,rclone 就只会缓存这个文件的开头部分。这些文件在缓存中是以他们的原始大小存在的,但是在这些文件中,只有被下载的部分才有数据(稀散文件)。

这个模式应该支持所有的正常文件系统操作,否则与--vfs-cache-mode 写入相同。

当读取文件的时候 rclone 会读取 --buffer-size 加上超前读取 --vfs-read-ahead 大小的文件。--buffer-size 被存在内存, --vfs-read-ahead 缓存在磁盘。

使用这个模式的时候,我们推荐 --buffer-size 不要太大,如果需要的话 --vfs-read-ahead 可以设置大点。

重要提醒 不是所有的文件系统都支持稀散文件,尤其是 FAT/exFAT 不支持。如果缓存文件夹是在一个不支持稀散文件的硬盘上,rclone 就会表现非常糟糕,并且当检测到的时候会在日志中记录一个错误。

VFS 性能

这些选项可以用于出于性能或其它原因启用或禁用 vfs 的一些特性。

尤其是 S3 和 Swift 可以从 --no-modtime(或者用 --use-server-modtime 使用安静的效果) 选项受益很多,因为每次读取修改时间都要进行单独的请求。

--no-checksum     转或下载时不要比较大小
--no-modtime      不要读取和写入修改时间(可以加速某些操作)
--no-seek         不允许文件中查找
--read-only       只读挂载

当 rclone 从远端读取文件,他会分块读取。rclone 不是请求整个文件,而是读取指定的块。这是有利的,因为某些云提供商将读取作为请求的所有数据,而不是所传递的所有数据。

rclone 会从 --vfs-read-chunk-size 开始持续倍增缓存大小,直到达到最大值 --vfs-read-chunk-size-limit 。除被 --vfs-read-chunk-size-limit 设置为 off,这时缓存大小将没有限制。

--vfs-read-chunk-size SizeSuffix        分块读取源文件. (默认是 128M)
--vfs-read-chunk-size-limit SizeSuffix  最大缓存大小 (默认是 "off")

有时,rclone 不会按顺序传递读写操作,相比于查找,rclone 会直接等待一小段时间,让正确顺序恢复正常。这些选项只有在不使用磁盘缓存时有用。

--vfs-read-wait duration   Time to wait for in-sequence read before seeking. (default 20ms)
--vfs-write-wait duration  Time to wait for in-sequence write before giving error. (default 1s)

VFS 大小写敏感性

Linux 文件系统是大小写敏感的,两个文件名可能只有大小写区别,打开文件时,大小写必须严格正确。

文件系统在现代的 Windows 是大小写不敏感但是大小写保留的:虽然不管大小写都能打开一个文件,但是文件名的大小写会被保留,且可供程序查询。在同一个文件夹内不允许两个文件名只有大小写有区别。

通常在 macOS 文件系统是大小写不敏感的,虽然可以让他大小写敏感,但是这一般不是默认。

--vfs-case-insensitive 挂载选项控制 rclone 如何处理这两种情况。如果是 false,rclone 将原本文件名传递到挂载文件系统,如果为 true,rclone 会使用一个 fixup 手段,解释如下:

用户可能会指定打开、删除或重命名一个文件名,现在文件名原来挂载的文件系统中存储的不一样。如果这个参数指向一个已经存在的名字完全一样的文件,那么就会使用磁盘上已经存在的文件大小写。但是如果具有完全一样文件名的文件没有被找到,而有一个文件,其文件名只有大小写不同,这时,rclone 会明显地 fixup 这个名字。只有当一个存在的文件被请求时才会发生,由 rclone 新创建的文件名大小写敏感性由底层挂载的文件系统控制。

注意,运行 rclone 的操作系统(target)的大小写敏感性可能和 rclone 挂载的文件系(source)的大小写敏感性不同。这个选项控制 fixup 是否被使用以满足 target 的需要。

如果这个选项在命令行中提供了,那么它的默认值就取决于运行 rclone 的系统:在 Windows 和 macOS 上为 true,在其他情况下为 false。如果这个选项在没有值的情况下被提供,那他的默认值就是 true

rclone mount remote:path /path/to/mountpoint [flags]

选项

      --allow-non-empty                        Allow mounting over a non-empty directory (not Windows).
      --allow-other                            Allow access to other users.
      --allow-root                             Allow access to root user.
      --async-read                             Use asynchronous reads. (default true)
      --attr-timeout duration                  Time for which file/directory attributes are cached. (default 1s)
      --daemon                                 Run mount as a daemon (background mode).
      --daemon-timeout duration                Time limit for rclone to respond to kernel (not supported by all OSes).
      --debug-fuse                             Debug the FUSE internals - needs -v.
      --default-permissions                    Makes kernel enforce access control based on the file mode.
      --dir-cache-time duration                Time to cache directory entries for. (default 5m0s)
      --dir-perms FileMode                     Directory permissions (default 0777)
      --file-perms FileMode                    File permissions (default 0666)
      --fuse-flag stringArray                  Flags or arguments to be passed direct to libfuse/WinFsp. Repeat if required.
      --gid uint32                             Override the gid field set by the filesystem. (default 1000)
  -h, --help                                   help for mount
      --max-read-ahead SizeSuffix              The number of bytes that can be prefetched for sequential reads. (default 128k)
      --no-checksum                            Don't compare checksums on up/download.
      --no-modtime                             Don't read/write the modification time (can speed things up).
      --no-seek                                Don't allow seeking in files.
  -o, --option stringArray                     Option for libfuse/WinFsp. Repeat if required.
      --poll-interval duration                 Time to wait between polling for changes. Must be smaller than dir-cache-time. Only on supported remotes. Set to 0 to disable. (default 1m0s)
      --read-only                              Mount read-only.
      --uid uint32                             Override the uid field set by the filesystem. (default 1000)
      --umask int                              Override the permission bits set by the filesystem.
      --vfs-cache-max-age duration             Max age of objects in the cache. (default 1h0m0s)
      --vfs-cache-max-size SizeSuffix          Max total size of objects in the cache. (default off)
      --vfs-cache-mode CacheMode               Cache mode off|minimal|writes|full (default off)
      --vfs-cache-poll-interval duration       Interval to poll the cache for stale objects. (default 1m0s)
      --vfs-case-insensitive                   If a file name not found, find a case insensitive match.
      --vfs-read-ahead SizeSuffix              Extra read ahead over --buffer-size when using cache-mode full.
      --vfs-read-chunk-size SizeSuffix         Read the source objects in chunks. (default 128M)
      --vfs-read-chunk-size-limit SizeSuffix   If greater than --vfs-read-chunk-size, double the chunk size after each chunk read, until the limit is reached. 'off' is unlimited. (default off)
      --vfs-read-wait duration                 Time to wait for in-sequence read before seeking. (default 20ms)
      --vfs-write-back duration                Time to writeback files after last use when using cache. (default 5s)
      --vfs-write-wait duration                Time to wait for in-sequence write before giving error. (default 1s)
      --volname string                         Set the volume name (not supported by all OSes).
      --write-back-cache                       Makes kernel buffer writes before sending them to rclone. Without this, writethrough caching is used.

查阅 global flags page 以查看没有在这里列出的全局选项。

rclone serve

用指定的协议搭建服务,以供访问 remote。

概要

rclone serve 被用于通过指定的协议搭建服务,以供访问 remote。这个命令需要使用子命令以指定协议,例如:

rclone serve http remote:

每个子命令都有他自己的选项,你可以查看他们的帮助:

rclone serve <protocol> [opts] <remote> [flags]

选项

  -h, --help   help for serve

查阅 global flags page 以查看没有在这里列出的全局选项。

另外参阅

rclone serve dlna

通过 DLNA 协议提供访问 remote:path 的服务

概要

rclone serve dlna 是一个服务于 rclone remote 存储的媒体文件的 DLNA 媒体服务端,许多设备,例如 Xbox 和 PlayStation,可以在 LAN 下自动发现这个服务器,并从上播放视频、音频。VLC 也是支持的。服务发现使用 UDP 多重广播包(UDP multicast packets)(SSDP),因此只在 LAN 下工作。

Rclone 会列出 remote 中的所有文件,而不会基于媒体格式或后缀名过滤文件。另外,不提供媒体转码支持。这意味着一些播放器可能会显示他们不能正确播放的文件。

服务器选项

--addr 指定监听的地址和端口 例如:--addr 1.2.3.4:8000--addr :8080 监听所有 ip。

--name 可以选择一个友好的服务器名字,默认是 rclone(hostname)

--log-trace-vv 结合起来可以为所有的 UPNP 传输开启额外的 debug 记录。

rclone serve ftp

通过 FTP 协议提供访问 remote:path 的服务

概要

rclone serve ftp 实施一个基本的 ftp 服务,通过 ftp 协议提供访问 remote 的服务。他可以通过 ftp 客户端、浏览器进行浏览,你也可以先建一个 ftp 类型的 remote 去读写他。

服务器选项

--addr 指定监听的地址和端口 例如:--addr 1.2.3.4:8000--addr :8080 监听所有 ip。默认只监听 localhost 。用 :0 可以让系统自动选择端口

认证

默认服务无需登陆

你可以用用 --user--pass 选项设置一个用户

rclone serve http

通过 HTTP 协议提供访问 remote:path 的服务

概要

rclone serve http 实施一个基本的 http 服务,通过 http 协议提供访问 remote 的服务。他可以通过浏览器进行浏览,你也可以先建一个 http 类型的 remote 去读写他。

你可以使用 filter 选项(例如 --include--exclude)去控制服务哪些文件

这个服务会 log errors,用 -v 以查看 logs。

--bwlimit 被用于文件传输,使用 --stats 控制统计打印。

服务器选项

--addr 指定监听的地址和端口 例如:--addr 1.2.3.4:8000--addr :8080 监听所有 ip。默认只监听 localhost 。用 :0 可以让系统自动选择端口

--server-read-timeout--server-write-timeout 控制总传输读写时间。

--max-header-bytes 设置在 http 头接收的最大字节数

--baseurl 控制服务的 url 前缀。默认从根。如果用了 --baseurl "/rclone" 那么 rclone 会从 "/rclone/" 开始服务。对于使用代理很有用。rclone 默认会插入 / ,所以 --baseurl "rclone" --baseurl "/rclone"--baseurl "/rclone/" 效果是一样的

--template 允许用户为 http 和 webdav 服务功能指定自定义标记模板。服务器将以下要在模板中使用的标记导出到服务器页面:

参数 描述
.Name 文件或文件夹的全路径
.Title Directory listing of .Name
.Sort The current sort used. This is changeable via ?sort= parameter
Sort Options: namedirfist,name,size,time (default namedirfirst)
.Order The current ordering used. This is changeable via ?order= parameter
Order Options: asc,desc (default asc)
.Query Currently unused.
.Breadcrumb Allows for creating a relative navigation
-- .Link The relative to the root link of the Text.
-- .Text The Name of the directory.
.Entries Information about a specific file/directory.
-- .URL The 'url' of an entry.
-- .Leaf Currently same as 'URL' but intended to be 'just' the name.
-- .IsDir Boolean for if an entry is a directory or not.
-- .Size Size in Bytes of the entry.
-- .ModTime The UTC timestamp of an entry.
认证

默认服务无需登陆

你可以用可设置多个用户的 htpasswd 文件, 或只用 --user--pass 选项设置一个用户.

--htpasswd /path/to/htpasswd 提供 htpasswd 文件。它使用标准 apache 格式,支持 MD5, SHA1 和 Bcrypt 用于基本的验证。

创建一个 htpasswd 文件:

touch htpasswd
htpasswd -B htpasswd user
htpasswd -B htpasswd anotherUser

可以在 rclone 运行的时候更新 htpasswd 文件。

使用 --realm 设置授权 realm.

SSL/TLS

默认用 http。如果你想用 https ,需要用 --cert--key 标签。如果你想做客户端的验证,还需要用 --client-ca

--cert 应当是 PEM 编码的 certificate 或连起来的一串有 CA 的 certificate

--key 应当是 PEM 编码的私钥

--client-ca 应当是 PEM 编码的用户证明

rclone serve restic

为 restic's REST API 提供访问 remote 的服务

概要

rclone serve restic 实施一个基本的 restic's REST backend API 服务,通过 http 协议提供访问 remote 的服务。这可允许 restic 使用 rclone 让 restic 不直接支持的云服务提供商作为一个数据存储器。

Restic 是一个用于做备份的命令行工具。

这个服务器会记录错误,使用 -v 查看 logs。

--bwlimit 被用于文件传输,使用 --stats 控制统计打印。

为 restic 的使用配置 rclone

首先 从你选择的云服务提供商设置 1 个 remote

在你设置好 remote 之后,检查它是否运行,例如使用 rclone lsd remote:,可能你的 remote 不叫 remote,替换为你的那个名字就行。

然后启动 rclone restic server:

rclone serve restic -v remote:backup

这个服务会运行在 localhost:8080,你可以使用 --addr 改变地址。

你或许希望开机就启动这个服务。

为使用 rclone 而配置 restic

现在你可以 跟随 restic 指南 设置好 restic

注意你需要 restic 版本大于 0.8.2,来与 rclone 交互

对于上述例子,你需要使用 http://localhost:8080/ 作为 rest 服务器的 url

例如:

$ export RESTIC_REPOSITORY=rest:http://localhost:8080/
$ export RESTIC_PASSWORD=yourpassword
$ restic init
created restic backend 8b1a4b56ae at rest:http://localhost:8080/

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
$ restic backup /path/to/files/to/backup
scan [/path/to/files/to/backup]
scanned 189 directories, 312 files in 0:00
[0:00] 100.00%  38.128 MiB / 38.128 MiB  501 / 501 items  0 errors  ETA 0:00
duration: 0:00
snapshot 45c8fdd8 saved
多个仓库

提醒一下,你可以使用这个终端 host 多个仓库,通过在 url 后边添加文件夹路径,注意这些 必须/ 结束。例如:

$ export RESTIC_REPOSITORY=rest:http://localhost:8080/user1repo/
## backup user1 stuff
$ export RESTIC_REPOSITORY=rest:http://localhost:8080/user2repo/
## backup user2 stuff
私有仓库

--private-repos 选项可以被用于将用户限制为以 /<username>/ 路径开头的存储库。

服务器选项

--addr 指定监听的地址和端口 例如:--addr 1.2.3.4:8000--addr :8080 监听所有 ip。默认只监听 localhost 。用 :0 可以让系统自动选择端口

--server-read-timeout--server-write-timeout 控制总传输读写时间。

--max-header-bytes 设置在 http 头接收的最大字节数

--baseurl 控制服务的 url 前缀。默认从根。如果用了 --baseurl "/rclone" 那么 rclone 会从 "/rclone/" 开始服务。对于使用代理很有用。rclone 默认会插入 / ,所以 --baseurl "rclone" --baseurl "/rclone"--baseurl "/rclone/" 效果是一样的

--template 允许用户为 http 和 webdav 服务功能指定自定义标记模板。服务器将以下要在模板中使用的标记导出到服务器页面:

参数 描述
.Name 文件或文件夹的全路径
.Title Directory listing of .Name
.Sort The current sort used. This is changeable via ?sort= parameter
Sort Options: namedirfist,name,size,time (default namedirfirst)
.Order The current ordering used. This is changeable via ?order= parameter
Order Options: asc,desc (default asc)
.Query Currently unused.
.Breadcrumb Allows for creating a relative navigation
-- .Link The relative to the root link of the Text.
-- .Text The Name of the directory.
.Entries Information about a specific file/directory.
-- .URL The 'url' of an entry.
-- .Leaf Currently same as 'URL' but intended to be 'just' the name.
-- .IsDir Boolean for if an entry is a directory or not.
-- .Size Size in Bytes of the entry.
-- .ModTime The UTC timestamp of an entry.
认证

默认服务无需登陆

你可以用可设置多个用户的 htpasswd 文件, 或只用 --user--pass 选项设置一个用户.

--htpasswd /path/to/htpasswd 提供 htpasswd 文件。它使用标准 apache 格式,支持 MD5, SHA1 和 Bcrypt 用于基本的验证。

创建一个 htpasswd 文件:

touch htpasswd
htpasswd -B htpasswd user
htpasswd -B htpasswd anotherUser

可以在 rclone 运行的时候更新 htpasswd 文件。

使用 --realm 设置授权 realm.

SSL/TLS

默认用 http。如果你想用 https ,需要用 --cert--key 标签。如果你想做客户端的验证,还需要用 --client-ca

--cert 应当是 PEM 编码的 certificate 或连起来的一串有 CA 的 certificate

--key 应当是 PEM 编码的私钥

--client-ca 应当是 PEM 编码的用户证明

选项
      --addr string                     IPaddress:Port or :Port to bind server to. (default "localhost:8080")
      --append-only                     disallow deletion of repository data
      --baseurl string                  Prefix for URLs - leave blank for root.
      --cert string                     SSL PEM key (concatenation of certificate and CA certificate)
      --client-ca string                Client certificate authority to verify clients with
  -h, --help                            help for restic
      --htpasswd string                 htpasswd file - if not provided no authentication is done
      --key string                      SSL PEM Private key
      --max-header-bytes int            Maximum size of request header (default 4096)
      --pass string                     Password for authentication.
      --private-repos                   users can only access their private repo
      --realm string                    realm for authentication (default "rclone")
      --server-read-timeout duration    Timeout for server reading data (default 1h0m0s)
      --server-write-timeout duration   Timeout for server writing data (default 1h0m0s)
      --stdio                           run an HTTP2 server on stdin/stdout
      --template string                 User Specified Template.
      --user string                     User name for authentication.

查阅 global flags page 以查看没有在这里列出的全局选项。

rclone serve sftp

通过 sFTP 协议提供访问 remote:path 的服务

概要

rclone serve sftp 实施一个基本的 sftp 服务,通过 sftp 协议提供访问 remote 的服务。他可以通过 sftp 客户端使用,你也可以先建一个 sftp 类型的 remote 去读写他。

你可以使用 filter 选项(例如 --include--exclude)去控制服务哪些文件

这个服务会 log errors,用 -v 以查看 logs。

--bwlimit 被用于文件传输,使用 --stats 控制统计打印。

你必须提供一些用于验证的方法,可以使用 --user/--pass、一个公钥验证文件(使用 --authorized-keys 指派,默认与 ssh 的相同)、一个 --auth-proxy、或者设置 --no-auth

提醒下这个也实施了几个 shell 命令,所以他可以为 rclone sftp 后台提供 md5sum/sha1sum/df 信息。意味着当与 rclone sftp backend 配对时,它支持 SHA1SUMs、MD5SUMs、和 about 命令。

如果你不施加 --key 那么 rclone 会自动生成一个,并且将它缓存以供之后使用。

默认这个服务器会绑定 localhost:2022,如果你希望他可以被从外部访问,那么就使用 --addr :2022

注意默认的 --vfs-cache-mode off 对于 rclone sftp backend 是可以的,但是对于其它 SFTP 客户端可能就用不了。

rclone serve webdav

通过 webdav 协议提供访问 remote:path 的服务

概要

rclone serve webdav 实施一个基本的 webdav 服务,通过 webdav 协议在 HTTP 上提供访问 remote 的服务。他可以通过 webdav 客户端、浏览器进行浏览,你也可以先建一个 webdav 类型的 remote 去读写他。

Webdav 选项

--etag-hash

控制 ETag header。没有这个选项的话,ETag 默认基于 ModTime 和 对象大小

如果这个选项被设置为 auto ,那么 rclone 会选择后台第一个支持的 hash,或者你可以使用一个 hash 的名字例如:“MD5” 或 “SHA-1”

使用 rclone hashsum 以查看整个列表。

服务器选项

--addr 指定监听的地址和端口 例如:--addr 1.2.3.4:8000--addr :8080 监听所有 ip。默认只监听 localhost 。用 :0 可以让系统自动选择端口

--server-read-timeout--server-write-timeout 控制总传输读写时间。

--max-header-bytes 设置在 http 头接收的最大字节数

--baseurl 控制服务的 url 前缀。默认从根。如果用了 --baseurl "/rclone" 那么 rclone 会从 "/rclone/" 开始服务。对于使用代理很有用。rclone 默认会插入 / ,所以 --baseurl "rclone" --baseurl "/rclone"--baseurl "/rclone/" 效果是一样的

--template 允许用户为 http 和 webdav 服务功能指定自定义标记模板。服务器将以下要在模板中使用的标记导出到服务器页面:

参数 描述
.Name 文件或文件夹的全路径
.Title Directory listing of .Name
.Sort The current sort used. This is changeable via ?sort= parameter
Sort Options: namedirfist,name,size,time (default namedirfirst)
.Order The current ordering used. This is changeable via ?order= parameter
Order Options: asc,desc (default asc)
.Query Currently unused.
.Breadcrumb Allows for creating a relative navigation
-- .Link The relative to the root link of the Text.
-- .Text The Name of the directory.
.Entries Information about a specific file/directory.
-- .URL The 'url' of an entry.
-- .Leaf Currently same as 'URL' but intended to be 'just' the name.
-- .IsDir Boolean for if an entry is a directory or not.
-- .Size Size in Bytes of the entry.
-- .ModTime The UTC timestamp of an entry.
认证

默认服务无需登陆

你可以用可设置多个用户的 htpasswd 文件, 或只用 --user--pass 选项设置一个用户.

--htpasswd /path/to/htpasswd 提供 htpasswd 文件。它使用标准 apache 格式,支持 MD5, SHA1 和 Bcrypt 用于基本的验证。

创建一个 htpasswd 文件:

touch htpasswd
htpasswd -B htpasswd user
htpasswd -B htpasswd anotherUser

可以在 rclone 运行的时候更新 htpasswd 文件。

使用 --realm 设置授权 realm.

SSL/TLS

默认用 http。如果你想用 https ,需要用 --cert--key 标签。如果你想做客户端的验证,还需要用 --client-ca

--cert 应当是 PEM 编码的 certificate 或连起来的一串有 CA 的 certificate

--key 应当是 PEM 编码的私钥

--client-ca 应当是 PEM 编码的用户证明

过滤,包含和排除

注意: purge 不适用 filter

最简单的试用方法是 ls 或者 --dry-run 与 -v 搭配

Patterns

使用 "file globs" 进行匹配

如果 pattern 以 / 开头那么只匹配目录树顶层,相对于 remote 的根目录。如果不以 / 开头,那么就匹配路径的末尾,但它会匹配整个路径元素:

file.jpg  - 匹配 "file.jpg"
          - 匹配 "directory/file.jpg"
          - 不匹配 "afile.jpg"
          - 不匹配 "directory/afile.jpg"
/file.jpg - 匹配 "file.jpg" in the root directory of the remote
          - 不匹配 "afile.jpg"
          - 不匹配 "directory/file.jpg"

即使在 windows 上,也不能用 \

* 匹配 \ 以外的任何字符串:

*.jpg  - 匹配 "file.jpg"
       - 匹配 "directory/file.jpg"
       - 不匹配 "file.jpg/something"

** 匹配任何字符串,包括 /

dir/** - 匹配 "dir/file.jpg"
       - 匹配 "dir/dir1/dir2/file.jpg"
       - 不匹配 "directory/file.jpg"
       - 不匹配 "adir/file.jpg"

? 匹配 \ 以外的任何字符:

l?ss  - 匹配 "less"
      - 匹配 "lass"
      - doesn't match "floss"

[] 构成类匹配,如 [a-z] [aeiou] [[:alpha:]] 详见 go regexp docs

h[ae]llo - matches "hello"
         - matches "hallo"
         - doesn't match "hullo"

{} 构成选择器,应包含逗号分隔的一系列 pattern 。这些 patterns 可以包含通配符:

{one,two}_potato - matches "one_potato"
                 - matches "two_potato"
                 - doesn't match "three_potato"
                 - doesn't match "_potato"

\ 用于转义

\*.jpg       - matches "*.jpg"
\\.jpg       - matches "\.jpg"
\[one\].jpg  - matches "[one].jpg"

patterns 都是大小写敏感的(除了 --ignore-case 使用时)

filter globs 只能用于 flags,不能用于 remotes 。例如: rclone copy "remote:dir*.jpg" /path/to/dir 不会生效,应该这样写 rclone --include "*.jpg" copy remote:dir /path/to/dir

目录

rclone 会保持 track 能匹配所有 file pattern 的文件夹

例如有这样一个 include rule

/a/*.jpg

那么会同步这个规则的文件夹:

/a/

如果在任何规则后加上一个 / ,那么就只会匹配文件夹。

目录匹配对于基于 bucket 的远程地址无效(例如 s3, google compute storage),因为它们没有文件夹的概念。

rsync 和 rclone patterns 的区别

rclone 使用 bash 风格 {a,b,c} 的 glob 来匹配,而 rsync 不是。

规则如何被应用

每个文件从上到下的一条条尝试匹配规则

如果所有规则都不匹配,那么默认就包含这个文件

例如:

- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- *

会包含:

  • file1.jpg
  • file3.png
  • file2.avi

排除:

  • secret17.jpg
  • non *.jpg and *.png

添加过滤规则

重复选项

你可以重复以下选项来添加多个不同的规则

  • --include
  • --include-from
  • --exclude
  • --exclude-from
  • --filter
  • --filter-from

不要同时使用 --include*--exclude* ,可能有意外结果。尝试使用 --filter*

相同类型的会在一起按以上的顺序处理,无论原始参数的顺序如何。

如果要混合 include 和 exclude 的顺序,用 --filter

--exclude

添加单条的排除规则。可以重复。例如:

--exclude *.bak

--exclude-from

从文件添加排除规则。可以重复。例如:

## a sample exclude rule file
*.bak
file2.jpg

--include

添加单条的包含规则。可以重复。例如: --include *.{png,jpg}

会在 filter list 末尾添加一个隐含的 --exclude * 这意味着你可以混合 --include--include-from 与其它 filters ,但你必须在 include 描述中包含所有你想包含的文件。

--include-from

## a sample include rule file
*.jpg
*.png
file2.avi

--filter

--filter "- *.bak"

--filter-from

## a sample filter rule file
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- /dir/Trash/**
+ /dir/**
## exclude everything else
- *

这个规则会包含所有 jpg 和 png 文件,排除所有匹配 secret*.jpg 的文件,并包含 file2.avi ,也会包含 dir 中的一切(除了 /dir/Trash )。

--files-from

有一个 files-from.txt 文件:

## comment
file1.jpg
subdir/file2.jpg

这样运行 :

rclone copy --files-from files-from.txt /home/me/pics remote:pics

结果:

/home/me/pics/file1.jpg        → remote:pics/file1.jpg
/home/me/pics/subdir/file2.jpg → remote:pics/subdir/file2.jpg

--min-size

--max-size

--max-age

--min-age

--delete-excluded

这个选项很危险。最好先用 --dry-run -v 运行一下。

这会在目标路径删除所有排除在规则外的文件。

--dump filters

--ignore-case

基于一个文件而排除

--exclude-if-present

举例,你有以下目录结构:

dir1/file1
dir1/dir2/file2
dir1/dir2/dir3/file3
dir1/dir2/dir3/.ignore

执行:

rclone sync --exclude-if-present .ignore dir1 remote:backup

这样 dir3 就不会被同步了

这个选项不能多重添加,只能用一个排除文件。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...