Rclone使用与配置
Rclone挂载Alist (Windows)
把rclone的启动命令换成下面这个,将使rclone流畅度提升数倍。.\rclone mount alist: M: --network-mode --header "Referer:" --multi-thread-streams 8 --buffer-size 512M --vfs-fast-fingerprint
在 Windows 上安装
要在 Windows 上运行 rclone mount,您需要下载并安装WinFsp (Github releases)。
WinFsp是一个开源的 Windows 文件系统代理,它可以轻松地为 Windows 编写用户空间文件系统。它提供了一个 FUSE 模拟层,rclone 可将其与cgofuse结合使用。这两个软件包均由 Bill Zissimopoulos 开发,他在 rclone 的 Windows 挂载实现过程中提供了很大的帮助。
Windows 上的安装模式
与其他操作系统不同,Microsoft Windows 为网络驱动器和固定驱动器提供了不同的文件系统类型。它基于固定驱动器快速可靠,而网络驱动器延迟相对较高且可靠性较低这一假设,从而优化了访问。某些设置也可以区分这两种类型,例如,Windows 资源管理器应仅显示图标,而不为网络驱动器上的图像和视频文件创建预览缩略图。
在大多数情况下,rclone 会默认将远程服务器挂载为普通的固定磁盘驱动器。但是,您也可以选择将其挂载为远程网络驱动器(通常称为网络共享)。如果您使用默认的固定驱动器模式挂载 rclone 远程服务器,并遇到意外的程序错误、卡顿或其他问题,请考虑改为挂载为网络驱动器。
当挂载为固定磁盘驱动器时,您可以挂载到未使用的驱动器号,也可以挂载到表示现有父目录或驱动器的不存在子目录的路径。使用特殊值将指示 rclone 自动分配下一个可用的驱动器号,从 Z: 开始向后移动。
命令解释:
alist表示alist的配置文件,利用命令.\rclone config创建。M表示挂在到M盘,注意:在挂载前必须是没有M盘。--network-mode至关重要,这个参数是影响都文件管理器打开挂载目录的响应速度。这个参数的原意是以网络位置挂载即如下图。如果没有这个参数,rclone就会挂载到设备和驱动器。
--header "Referer:"含阿里云盘时需要,否则挂载后打不开文件。--buffer-size 512M缓存占用的最大内存大小为512M,512可改为其他数字,不宜设置得过大,过大会导致文件过多的占用网络和电脑内存。--vfs-fast-fingerprint使用快速的文件校验检测,加开文件打开速度。--volname设置盘名称
配置自动启动
使用 Windows 的任务计划程序来实现自动启动。
打开 Windows 的任务计划程序(Task Scheduler),最右栏选择“创建任务”,进行如下配置。
名称用于给该计划任务命名,如Rclone mount等。
运行任务时,使用下列用户账户修改为SYSTEM。
上侧选择进入“触发器”,新建条件,开始任务选择“登录时”,再进行合理调整保存即可。
上侧选择进入“操作”,新建启动程序。
- 程序选择
D:\rclone\rclone.exe(你安装rclone的位置) - 添加参数填写
mount WEBDAV:/ Z: --vfs-cache-mode full --no-console --log-file .\logs\mount_logs.txt --config .\rclone.conf
(或者任何你想要的命令或参数,我们只是让它在后台运行而已)
对参数的必要解释如下:
- 参数中的
WEBDAV应当修改为你创建的配置文件的Name。 - 参数中的
Z:代表你要挂载的盘符位置。 --vfs-cache-mode full用于支持流式读取,如看视频等。
off:
In this mode the cache will read directly from the remote and write directly to the remote without caching anything on disk.
(本地不做任何缓存,所有文件直接从云端获取并写入。建议网速特别好时(复制粘贴大文件时建议至少100M管以上速度)使用。minimal:
This is very similar to “off” except that files opened for read AND write will be buffered to disks. This means that files opened for write will be a lot more compatible, but uses the minimal disk space.
(和off类似,但是已经打开的文件会被缓存到本地。个人推荐,小文件基本够用,但是如果你的网络情况(梯子)不是特别好的话,用writes也行writes:
In this mode files opened for read only are still read directly from the remote, write only and read/write files are buffered to disk first.
(如果文件属性为只读则只从云端获取,不然先缓存在本地进行读写操作,随后被同步。个人推荐使用,但是在直接从本地复制文件到GDrive时还是看网络情况full:
In this mode all reads and writes are buffered to and from disk. When a file is opened for read it will be downloaded in its entirety first.
(所有的读写操作都会缓存到磁盘中。然后才会同步。不是很推荐。会导致所有文件均被缓存到本地。直到达到你缓存总额(–cache-total-chunk-size,默认大小10G)。但是你网速特别差时也可以使用。
--log-file代表日志文件位置。--config代表配置文件位置。
Windows自启动
1.创建启动脚本
此时请使用 git bash 的终端执行以下命令,因为我使用cmd 和 powershell 都出现关闭终端后挂载程序退出、本地挂载的OneDrive退出的现象。 如果你的windows没有安装git , 请自行安装。若你使用 cmd 的话 ,cmd 是不能退出的,要保持 cmd 不退出本地硬盘才一直挂载着。
在 git bash 中输入以下挂载命令:
1 | #rclone mount OneDrive_local:/ Q: --cache-dir E:\OneDrive --vfs-cache-mode writes & |
其中:
OneDrive_loca替换为你自己前面设置的名称 。Q: 替换为你想要挂载后硬盘的盘符名称即可,记得不要和本地的C盘、D盘等重复。E:\OneDrive为本地缓存目录,可自行设置 。
出现:The service rclone has been started 则说明挂载成功。
然后输入 exit 退出终端即可。
然后就可以看见本地多了一个盘,往里面复制文件就是上传,从里面复制文件到其它盘就是下载。
2.设置开机自启动挂载
创建一个名称为 startup_rclone.bat 的文件,里面填写上面的挂载命令:
1 | #rclone mount OneDrive_local:/ Q: --cache-dir E:\OneDrive --vfs-cache-mode writes & |
当然你也可以写个VB来隐藏窗口来后台运行
1. 创建
startup_rclone.vbs(放入Startup文件夹):
1
2
3 Set WshShell = CreateObject("WScript.Shell")
' 直接运行 rclone,隐藏窗口(0),不等待(False)
WshShell.Run "rclone mount alist: M: --multi-thread-streams 16 --buffer-size 8G --vfs-fast-fingerprint", 0, False2. 如果想延迟启动(等待网络连接):
1
2
3 Set WshShell = CreateObject("WScript.Shell")
WScript.Sleep 10000 ' 延迟10秒
WshShell.Run "rclone mount alist: M: --multi-thread-streams 16 --buffer-size 8G --vfs-fast-fingerprint", 0, False3. 如果想记录日志(调试用):
1
2 Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "rclone mount alist: M: --multi-thread-streams 16 --buffer-size 8G --vfs-fast-fingerprint > C:\rclone.log 2>&1", 0, False(日志会保存在
C:\rclone.log)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Option Explicit
Dim WMIService, Process, Processes, Flag, WS
Set WMIService = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set Processes = WMIService.ExecQuery("select * from win32_process")
Flag = true
for each Process in Processes
if strcomp(Process.name, "rclone.exe") = 0 then
Flag = false
exit for
end if
next
Set WMIService = nothing
if Flag then
Set WS = Wscript.CreateObject("Wscript.Shell")
WS.Run "rclone mount myftp:/ H: --cache-dir D:\logs_rcloneCache --vfs-cache-mode writes", 0
end if
将这个文件放在C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 中
重启计算机后就会自动挂设置的云盘了,当然这样做由于调用的是 cmd 因此还是不能关闭运行的 cmd。或者利用 Rclone GUIGithub下载地址 的进行管理的使用方法。
Linux自启动
1.创建启动脚本
首先在电脑上新建一个以service为扩展的文件,名字为rclone.service(分清楚就行)
1 | [Unit] |
rclone mount的参数可根据自己需求更改,例如
- alist代表rclone config中挂载的盘(rclone config查看名称)
- /gd 代表挂载到本地的文件夹的位置
- –vfs-cache-max-age 48h 代表缓存时间为48小时
- –vfs-cache-max-size 5G 代表缓存占用的最大内存为5G
还有其他挂载参数可去rclone官网查看
2.设置开机启动
设置开机启动
1 | systemctl enable rclone |
启动挂载
1 | systemctl start rclone |
1
2
3
4
5
6
7
8
9
10
11 [Unit]
Description=RClone Service
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
Environment=RCLONE_CONFIG=/opt/rclone/rclone.conf
KillMode=none
RestartSec=5
ExecStart=/usr/bin/rclone mount gcrypt: /GD \
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 [Unit]
Description=Google Drive (rclone)
AssertPathIsDirectory=/root/Anime
[Service]
Type=simple
ExecStart=/usr/bin/rclone mount
--config=/root/.config/rclone/rclone.conf \ --allow-other
--cache-tmp-upload-path=/tmp/rclone/upload
--cache-chunk-path=/tmp/rclone/chunks \ --cache-workers=8
--cache-writes \ --cache-dir=/tmp/rclone/vfs
--cache-db-path=/tmp/rclone/db \ --no-modtime
--drive-use-trash \ --stats=0 \ --checkers=16 \ --bwlimit=4000M
\ --dir-cache-time=60m \ --cache-info-age=60m Anime: /root/Anime
ExecStop=/bin/fusermount -u /root/Anime
Restart=always
RestartSec=5
[Install]
WantedBy=default.target
其他命令如下:
停止挂载
1 | systemctl stop rclone |
重新挂载
1 | systemctl restart rclone |
1 service rclone restart
Rclone文档
Basic syntax 基本语法
Rclone 将一个目录树从一个存储系统同步到另一个存储系统。
它的语法如下
1 | rclone subcommand [options] <parameters> <parameters...> |
一个 subcommand 是所需的 rclone 操作,(例如 sync , copy , ls ).
An option 是一个单字母标志(例如 -v )或一组单字母标志(例如 -Pv )或一个长标志(例如 --progress )。不需要选项。选项可以在 subcommand 后面出现,也可以在参数之间或在末尾出现,但只有全局选项可以在 subcommand 之前使用。 -- 选项之后的内容将不会被解释为选项,因此如果需要添加一个以 - 开头的参数,则应在该参数前面单独放置一个 -- ,例如
1 | rclone lsf -- -directory-starting-with-dash |
一个 parameter 通常是一个文件路径或 rclone 远程,例如 /path/to/file 或 remote:path/to/file ,但也可以是其他东西 - subcommand 帮助会告诉您是什么。
源路径和目标路径由你在配置文件中给存储系统命名的名称和子路径指定,例如,”drive:myfolder”来查看 Google drive 中的”myfolder”。
您可以在配置文件中定义任意多个存储路径。
请在学习 rclone 时使用 --interactive / -i 标志以避免意外数据丢失。
Subcommands 子命令
rclone 使用子命令系统。例如
1 | rclone ls remote:path # lists a remote |
主要的 rclone 命令,常用命令优先
- rclone config - 进入一个交互式的配置会话。
- rclone copy - 从源复制文件到目标,跳过已复制的文件。
- rclone sync - 使源和目标保持一致,仅修改目标。
- rclone bisync - 在两个路径之间进行双向同步。
- rclone move - 将文件从源移动到目标。
- rclone delete - 删除路径内的内容。
- rclone purge - 删除路径及其所有内容。
- rclone mkdir - 如果路径不存在则创建路径。
- rclone rmdir - 删除路径。
- rclone rmdirs - 删除路径下的任何空目录。
- rclone check - 检查源文件和目标文件是否匹配。
- rclone ls - 列出路径中所有对象的大小和路径。
- rclone lsd - 列出路径中的所有目录/容器/桶。
- rclone lsl - 列出路径中所有对象的大小、修改时间和路径。
- rclone md5sum - 为路径中的所有对象生成一个 md5sum 文件。
- rclone sha1sum - 生成路径中所有对象的 sha1sum 文件。
- rclone size - 返回远程路径中所有对象的总大小和数量。
- rclone version - 显示版本号。
- rclone cleanup - 如果可能,清理远程路径。
- rclone dedupe - 交互式地查找重复文件并删除/重命名它们。
- rclone authorize - 远程授权。
- rclone cat - 将任何文件连接起来并发送到 stdout。
- rclone copyto - 从源复制文件到目标,跳过已复制的文件。
- rclone completion - 输出 shell 完成脚本以供 rclone 使用。
- rclone gendocs - 输出 rclone 的 markdown 文档到指定目录。
- rclone listremotes - 列出配置文件中的所有远程。
- rclone mount - 将远程挂载为挂载点。
- rclone moveto - 将文件或目录从源移动到目标。
- rclone 隐私 - 隐私密码用于在 rclone.conf 中使用
- rclone cryptcheck - 检查加密远程的完整性。
- rclone about - 从远程获取配额信息。
请参阅命令索引以获取完整列表。
Copying single files 复制单个文件
rclone 通常会同步或复制目录。但是,如果源远程指向一个文件,rclone 将仅复制该文件。目标远程必须指向一个目录 - 如果不是这样,rclone 将给出错误 Failed to create file system for "remote:file": is a file not a directory 。
例如,假设你有一个远程目录,其中包含一个名为 test.jpg 的文件,那么你可以像这样仅复制该文件
1 | rclone copy remote:test.jpg /tmp/download |
文件 test.jpg 将被放置在 /tmp/download 内。
这相当于指定
1 | rclone copy --files-from /tmp/files remote: /tmp/download |
其中 /tmp/files 包含单行
1 | test.jpg |
建议使用 copy 来单独复制文件,而不是 sync 。它们的效果几乎相同,但 copy 将使用更少的内存。
Syntax of remote paths 远程路径的语法
路径传递给 rclone 命令的语法如下。
/path/to/dir
这指的是本地文件系统。
在 Windows 环境中, \ 在本地路径中可以替代 / 使用,非本地路径必须使用 / 。有关 Windows 特定路径的更多信息,请参阅本地文件系统文档。
这些路径不需要以 / 开头 - 如果没有,则它们将是相对于当前目录的路径。
remote:path/to/dir
这指的是在配置文件中定义的目录 path/to/dir 在 remote: 上,配置方式为 rclone config 。
remote:/path/to/dir
在大多数后端,这指的是与 remote:path/to/dir 相同的目录,并且这种格式应被优先使用。在极少数远程(FTP、SFTP、企业版 Dropbox)中,这将指向不同的目录。在这些远程中,没有前导 / 的路径将指向您的“家”目录,而带有前导 / 的路径将指向根目录。
:backend:path/to/dir
这是一个用于即时创建远程的高级形式。 backend 应该是后端的名称或前缀(配置文件中的 type ),并且所有后端的配置都应在命令行中提供(或在环境变量中)。
以下是一些示例:
1 | rclone lsd --http-url https://pub.rclone.org :http: |
在 https://pub.rclone.org/ 的根目录列出所有目录。
1 | rclone lsf --http-url https://example.com :http:path/to/dir |
列出 https://example.com/path/to/dir/ 中的文件和目录。
1 | rclone copy --http-url https://example.com :http:path/to/dir /tmp/dir |
将文件和目录从 https://example.com/path/to/dir 复制到 /tmp/dir 。
1 | rclone copy --sftp-host example.com :sftp:path/to/dir /tmp/dir |
使用 sftp 从 example.com 的相对目录 path/to/dir 复制文件和目录到 /tmp/dir 。
Connection strings 连接字符串
上述示例也可以使用连接字符串语法编写,因此不是通过命令行参数 --http-url https://pub.rclone.org 提供这些参数,而是将它们作为远程指定的一部分,作为某种连接字符串。
1 | rclone lsd ":http,url='https://pub.rclone.org':" |
这些也可以应用于修改现有的远程仓库或创建新的远程仓库,使用在线语法。此示例等同于向远程仓库 gdrive: 添加 --drive-shared-with-me 参数。
1 | rclone lsf "gdrive,shared_with_me:path/to/dir" |
使用连接字符串风格的语法的主要优势是,它只应用于远程端,而不是命令行中该类型的全部远程端。一个常见的误解是尝试将共享在 Google 驱动器上的文件复制到正常的驱动器,但这不会工作,因为 --drive-shared-with-me 标志同时应用于源和目标。
1 | rclone copy --drive-shared-with-me gdrive:shared-file.txt gdrive: |
但是使用连接字符串语法,这将按预期工作。
1 | rclone copy "gdrive,shared_with_me:shared-file.txt" gdrive: |
请注意,连接字符串仅影响即时后端的选项。例如,如果 gdriveCrypt 是基于 gdrive 的加密,则以下命令将不会按预期工作,因为 shared_with_me 会被加密后端忽略:
1 | rclone copy "gdriveCrypt,shared_with_me:shared-file.txt" gdriveCrypt: |
连接字符串具有以下语法
1 | remote,parameter=value,parameter2=value2:path/to/dir |
如果 parameter 具有 : 或 , ,则必须用 " 或 ' 括起来,因此
1 | remote,parameter="colon:value",parameter2="comma,value":path/to/dir |
如果引号中的值需要包含该引号,则应将其重复,例如
1 | remote,parameter="with""quote",parameter2='with''quote':path/to/dir |
这将使 parameter 为 with"quote , parameter2 为 with'quote 。
如果您省略了 =parameter ,则 rclone 会用 =true 替换,这与使用标志非常兼容。例如,如果您使用环境中的 s3 配置,可以使用:
1 | rclone lsd :s3,env_auth: |
这相当于
1 | rclone lsd :s3,env_auth=true: |
注意在命令行中,您可能需要用 " 或 ' 包围这些连接字符串,以防止外壳解释其中的任何特殊字符。
如果你是 shell 大师,那么你就会知道哪些字符串是安全的,哪些不是,但如果你不确定,可以将它们用 " 包围,并使用 ' 作为内部引号。这种语法在所有操作系统上都有效。
1 | rclone copy ":http,url='https://example.com':path/to/dir" /tmp/dir |
在 Linux/macOS 上,shell 中的 " 字符串仍然会解析一些字符(特别是 \ 、 $ 和 " ),因此如果字符串包含这些字符,可以交换 " 和 ' 的角色。请注意,这种语法在 Windows 上无效。
1 | rclone copy ':http,url="https://example.com":path/to/dir' /tmp/dir |
Connection strings, config and logging 连接字符串、配置和日志记录
如果通过命令行标志、环境变量或连接字符串向后端提供额外配置,rclone 将会在远程名称的基础上添加一个基于配置哈希的后缀,例如
1 | rclone -vv lsf --s3-chunk-size 20M s3: |
日志消息是否有
1 | DEBUG : s3: detected overridden config - adding "{Srj1p}" suffix to name |
This is so rclone 可以区分缓存后端的已修改远程和未修改远程。
这在日志中应该是仅能注意到的。
这 means that on the fly backends such as 在线生成的后端
1 | rclone -vv lsf :s3,env_auth: |
将会有自己的名字
1 | DEBUG : :s3: detected overridden config - adding "{YTu53}" suffix to name |
Valid remote names 有效的远程名称
远程名称区分大小写,并且必须遵循以下规则:
- 可能包含数字、字母、
_、-、.、+、@和空格。 - 不能以
-或空格开头。 - 不能以空格结尾。
从 rclone 版本 1.61 开始,任何 Unicode 数字和字母都是允许的,而在较早版本中则仅限于普通的 ASCII 字符(0-9, A-Z, a-z)。如果你从不同的 shell 使用相同的 rclone 配置,而这些 shell 可能配置了不同的字符编码,那么你必须小心使用所有这些 shell 都能写的字符。这在 Windows 上是一个主要问题,因为控制台传统上使用非 Unicode 字符集 - 由所谓的“代码页”定义。
在 Windows 上不要使用单字符名称,因为它会与 Windows 驱动器的名称产生歧义,例如:远程名称 C 无法与 C 驱动器区分。Rclone 始终假设单字母名称指的是一个驱动器。
Quoting and the shell 使用引号和 shell
当您在计算机上输入命令时,您正在使用称为命令行 shell 的东西。它以操作系统特定的方式解释各种字符。
这里有一些注意事项,可能有助于不熟悉 shell 规则的用户
Linux / OSX
如果您的用户名包含空格或 shell 元字符(例如 * , ? , $ , ' , " , 等等), 则必须使用引号。默认情况下使用单引号 ' 。
1 | rclone copy 'Important files?' remote:backup |
如果您想发送一个 ' ,您将需要使用 " ,例如
1 | rclone copy "O'Reilly Reviews" remote:backup |
引用元字符的规则比较复杂,如果您想了解全部细节,您需要查阅您所使用的 shell 的手册页。
Windows
如果您的用户名包含空格,需要使用 " ,例如
1 | rclone copy "E:\folder name\folder name\folder name" remote:backup |
如果你单独使用根目录,则不要引用它(详见#464),例如
1 | rclone copy E:\ remote:backup |
Copying files or directories with : in the names 复制文件或目录,其中包含 : 在名称中
rclone 使用 : 来标记远程端名称。然而,在非 Windows 操作系统中,这是一个有效的文件名组成部分。远程名称解析器只会搜索到第一个 : ,所以如果你需要操作这样的文件或目录,请使用从 / 开始的完整路径,或者使用 / 作为当前目录前缀。
所以要同步一个名为 sync:me 的目录到一个名为 remote: 的远程端,请使用
1 | rclone sync --interactive ./sync:me remote:path |
或者
1 | rclone sync --interactive /full/path/to/sync:me remote:path |
Server Side Copy 服务器端复制
大多数远程(但不是全部 - 请参阅概述)支持服务器端复制。
这意味着如果你想将一个文件夹复制到另一个文件夹,那么 rclone 将不会下载所有文件并重新上传它们;它会指示服务器就地复制这些文件。
Eg
1 | rclone copy s3:oldbucket s3:newbucket |
将复制 oldbucket 的内容到 newbucket 而不下载和重新上传。
不支持服务器端复制的远程将会在这种情况下下载并重新上传。
服务器端复制将在使用 -v 标志时在日志中被识别,并且当远程不直接支持服务器端移动时, move 命令也可能使用它们。这通过先执行服务器端复制然后删除来完成,比下载和重新上传要快得多。
只有在远程名称相同时才会尝试复制服务器端副本。
这在脚本中可以用于高效地制作老化备份,例如
1 | rclone sync --interactive remote:current-backup remote:previous-backup |
Metadata support 元数据支持
元数据是关于文件(或目录)的数据,而不是文件(或目录)的内容。通常 rclone 只能在可能的情况下保留修改时间以及内容(MIME)类型。
使用 --metadata 或 -M 标志时,rclone 支持保留文件和目录的所有可用元数据。
支持哪些元数据以及这种支持意味着什么取决于后端。支持元数据的后端在其文档中有一个元数据部分,并且在功能表中列出(例如 local、s3)
一些后端不支持元数据,一些后端只支持文件的元数据,还有一些后端同时支持文件和目录的元数据。
Rclone 只支持一次元数据同步。这意味着只有当源对象发生变化并需要重新上传时,元数据才会从源对象同步到目标对象。如果源对象的元数据随后发生变化但对象本身没有改变,则不会同步到目标对象。这与 rclone 在不使用 --metadata 标志时同步 Content-Type 的方式一致。
从本地到本地同步时使用 --metadata 可以保留文件属性,如文件模式、所有者和扩展属性(非 Windows)。
使用 --metadata-set key=value 标记在对象首次上传时可以添加任意元数据。此标记可以重复使用,直到必要为止。
可以使用 –metadata-mapper 标记来传递一个程序的名称,在复制元数据从源到目标时可以对其进行转换。
Rclone 在进行服务器端 --metadata-set 和服务器端 --metadata-mapper 以及服务器端 Move 和服务器端 Copy 时支持 --metadata-set 和 --metadata-mapper,但在进行服务器端 DirMove (重命名目录)时不会支持,因为这将涉及递归进入目录。请注意,您可以使用 DirMove 禁用 --metadata-set,rclone 将会为每个单独的对象重新使用 --disable DirMove ,其中 Move 和 --metadata-set 是支持的。
Types of metadata 元数据类型
元数据分为两类。系统元数据和用户元数据。
后端自身使用的元数据称为系统元数据。例如,在本地后端中,系统元数据 uid 将在使用于类 Unix 平台时存储文件的用户 ID。
任意元数据称为用户元数据,可以按任何方式设置。
当对象从后端复制到后端时,如果提供了系统元数据,它们将尝试解释系统元数据。元数据可能会随着对象在不同后端之间复制而从用户元数据变为系统元数据。例如,从 s3 复制对象会设置 content-type 元数据。在理解此元数据的后端(如 azureblob )中,这将成为对象的内容类型。在不理解此元数据的后端(如 local 后端)中,这将成为用户元数据。然而,如果本地对象被复制回 s3,内容类型将被正确设置。
Metadata framework 元数据框架
Rclone 实现了一个元数据框架,可以从对象中读取元数据,并在上传对象(且仅在上传时)将其写入对象。
此元数据以字符串键和字符串值的形式存储为字典。
某些键名的名称有一些限制(这些可能在未来进一步澄清)。
- 必须小写
- 可以包含 @0@ @1@,其中包含 @2@ @3@ 或 @4@
- 长度取决于后端
每个后端都可以提供它理解的系统元数据。某些后端还可以存储任意用户元数据。
尽可能地,键名是标准化的,例如,可以从 s3 复制对象元数据到 azureblob,元数据将被适当翻译。
某些后端对元数据的大小有限制,如果上传时超过限制,rclone 将给出错误。
Metadata preservation 元数据保留
实现的目标是
- 尽可能保留元数据
- 尽可能解释元数据
因此,您可以将 S3 对象复制到本地磁盘,然后再无损地复制回 S3。同样,您可以将本地文件及其文件属性和 xattrs 从本地磁盘复制到 S3,然后再无损地复制回本地磁盘。
2 的结果是你可以复制一个 S3 对象及其元数据到 Azureblob(例如)并在 Azureblob 对象上显示这些元数据。
Standard system metadata 标准系统元数据
以下是一些标准系统元数据表,如果合适,后端可以实现。
| key | description | example |
|---|---|---|
| mode | 文件类型和模式: 八进制, Unix 风格 | 0100664 |
| uid | 所有者用户 ID: 十进制数字 | 500 |
| gid | Group ID of owner: 十进制数字 | 500 |
| rdev | 设备 ID(如果是特殊文件)=> 十六进制 | 0 |
| atime | 上次访问时间: RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 |
| mtime | 上次修改时间: RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 |
| btime | 文件创建时间(出生时间): RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 |
| utime | 文件上传时间: RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 |
| cache-control | Cache-Control 头 | no-cache |
| content-disposition | Content-Disposition 头 | inline |
| content-encoding | Content-Encoding header | gzip |
| content-language | Content-Language header | en-US |
| content-type | Content-Type 头 | text/plain |
The metadata keys mtime 和 content-type 如果在元数据中提供,将优先于读取源对象的 Content-Type 或修改时间。
哈希值不会包含在系统元数据中,因为已经有明确的方式来读取这些值。
Options 选项
Rclone 有许多选项来控制其行为。
接受参数的选项可以以两种方式传递值, --option=value 或 --option value 。然而布尔(true/false)选项的行为与其他选项略有不同, --boolean 将选项设置为 true ,而缺少标志则将其设置为 false 。还可以指定 --boolean=false 或 --boolean=true 。请注意 --boolean false 无效 - 这将被解析为 --boolean ,而 false 将被解析为 rclone 的额外命令行参数。
文档说明可以接受 stringArray 参数的选项可以接受多个值。要传递多个值,重复该选项;例如: --include value1 --include value2 。
Time or duration options 时间或持续时间选项
TIME 或 DURATION 选项可以指定为持续时间字符串或时间字符串。
持续时间字符串是一个可选带符号的十进制数字序列,每个数字可以有小数部分和单位后缀,例如 “300ms”、”-1.5h” 或 “2h45m”。默认单位是秒,以下缩写也是有效的:
ms- 毫秒s- 秒m- 分钟h- 小时d- 天w- 周M- 月y- 年
这些也可以用以下格式指定绝对时间:
- RFC3339 - 例如
2006-01-02T15:04:05Z或2006-01-02T15:04:05+07:00 - ISO8601 日期和时间,本地时区 -
2006-01-02T15:04:05 - ISO8601 日期和时间,本地时区 -
2006-01-02 15:04:05 - ISO8601 日期 -
2006-01-02(YYYY-MM-DD)
Size options 大小选项
使用 SIZE 的选项默认使用 KiB(1024 字节的倍数)。然而,可以使用后缀 B 表示 Byte, K 表示 KiB, M 表示 MiB, G 表示 GiB, T 表示 TiB, P 表示 PiB。这些是二进制单位,例如 1,210,220,2**30 等。
–backup-dir=DIR
使用 sync 、 copy 或 move 时,任何会被覆盖或删除的文件将按照其原始层次结构移动到此目录中。
如果设置了 --suffix ,则移动的文件将添加后缀。如果 DIR 中存在相同路径(添加后缀后)的文件,则会被覆盖。
使用的远程必须支持服务器端移动或复制,并且您必须使用与同步目标相同的远程。备份目录不能与目标目录重叠,除非通过过滤规则排除。
例如
1 | rclone sync --interactive /path/to/local remote:current --backup-dir remote:old |
将同步 /path/to/local 到 remote:current ,但对于任何将要被更新或删除的文件,将会存储在 remote:old 中。
如果从脚本运行 rclone,你可能希望使用今天的日期作为传递给 --backup-dir 的目录名以存储旧文件,或者你可以传递 --suffix 与今天的日期。
请参见 --compare-dest 和 --copy-dest 。
–bind string
绑定用于出站连接的本地地址。这可以是 IPv4 地址(1.2.3.4),IPv6 地址(1234::789A)或主机名。如果主机名无法解析或解析为多个 IP 地址,则会出错。
您可以使用 --bind 0.0.0.0 强制 rclone 使用 IPv4 地址,并使用 --bind ::0 强制 rclone 使用 IPv6 地址。
–bwlimit=BANDWIDTH_SPEC
此选项控制带宽限制。例如
1 | --bwlimit 10M |
这意味着将上传和下载带宽限制为 10 MiB/s。注意,这是每秒字节而不是位。要使用单一限制,指定所需的带宽(以 KiB/s 为单位),或使用后缀 B|K|M|G|T|P。默认情况下, 0 表示不进行带宽限制。
上传和下载带宽可以分别指定,如 --bwlimit UP:DOWN 所示,所以
1 | --bwlimit 10M:100k |
would mean 限制上传带宽到 10 MiB/s 和 下载带宽到 100 KiB/s。这两个限制都可以是“off”表示没有限制,所以如果你想只限制上传带宽,你会使用
1 | --bwlimit 10M:off |
这会将上传带宽限制为 10 MiB/s,但下载带宽将是无限的。
当指定为上述时,带宽限制将持续到 rclone 二进制文件运行结束。
还可以指定一个“时间表”来设置带宽限制,在特定时间应用特定的限制。要指定时间表,请将条目格式化为 WEEKDAY-HH:MM,BANDWIDTH WEEKDAY-HH:MM,BANDWIDTH... ,其中: WEEKDAY 是可选元素。
BANDWIDTH可以是一个数字,例如100k,或者上传:下载的配对数字,例如10M:1M。WEEKDAY可以写成整个单词或仅使用前 3 个字符。它是可选的。HH:MM是从 00:00 到 23:59 的一个小时。
条目之间可以用空格或分号分隔。
注意:在像 Docker 这样的环境中为了避免解析问题,分号可以用作分隔符代替空格。
避免白天工作时间链接饱和的一个典型时间表可能是:
用空格作为分隔符: --bwlimit "08:00,512k 12:00,10M 13:00,512k 18:00,30M 23:00,off"
用分号作为分隔符: --bwlimit "08:00,512k;12:00,10M;13:00,512k;18:00,30M;23:00,off"
在这些示例中,传输带宽将在每天早上 8 点设置为 512 KiB/s。中午时,带宽将上升到 10 MiB/s,然后在下午 1 点回落到 512 KiB/s。晚上 6 点,带宽限制将设置为 30 MiB/s,晚上 11 点将完全禁用(全速)。从晚上 11 点到早上 8 点之间将保持不限速。
An example of timetable with WEEKDAY could be:
用空格作为分隔符: --bwlimit "Mon-00:00,512 Fri-23:59,10M Sat-10:00,1M Sun-20:00,off"
用分号作为分隔符: --bwlimit "Mon-00:00,512;Fri-23:59,10M;Sat-10:00,1M;Sun-20:00,off"
这意味着,周一的传输带宽将被设置为 512 KiB/s。到周五结束前,它将上升到 10 MiB/s。周六 10:00 时,它将被设置为 1 MiB/s。从周日晚上 20:00 起,带宽将不再限制。
没有 WEEKDAY 的时间段将扩展到整个星期。所以这个例子:
1 | --bwlimit "Mon-00:00,512 12:00,1M Sun-20:00,off" |
相当于这个:
1 | --bwlimit "Mon-00:00,512Mon-12:00,1M Tue-12:00,1M Wed-12:00,1M Thu-12:00,1M Fri-12:00,1M Sat-12:00,1M Sun-12:00,1M Sun-20:00,off" |
带宽限制适用于所有后端的数据传输。对于大多数后端,目录列表的带宽也包括在内(例外是非 HTTP 后端, ftp , sftp 和 storj )。
注意单位是 Byte/s,不是 bit/s。通常连接是以 bit/s 来衡量的 - 要转换,请除以 8。例如,假设你有一个 10 Mbit/s 的连接,并且希望 rclone 使用其中的一半 - 5 Mbit/s。这是 5/8 = 0.625 MiB/s,因此你需要为 rclone 使用一个 --bwlimit 0.625M 参数。
在类 Unix 系统(Linux, macOS, …)上,可以通过向 rclone 发送 SIGUSR2 信号来切换带宽限制器。这允许您移除长时间运行的 rclone 传输的限制,并在需要时快速恢复到指定的值。假设只有一个 rclone 实例在运行,您可以这样切换限制器:
1 | kill -SIGUSR2 $(pidof rclone) |
如果您使用远程控制配置 rclone,则可以动态更改带宽限制:
1 | rclone rc core/bwlimit rate=1M |
–bwlimit-file=BANDWIDTH_SPEC
此选项控制每个文件的带宽限制。有关选项,请参见 --bwlimit 标志。
例如使用此设置以使不允许传输的速度快于 1 MiB/s
1 | --bwlimit-file 1M |
可以与 --bwlimit 结合使用。
请注意,如果提供了计划,则文件将使用传输开始时生效的计划。
–buffer-size=SIZE
使用此大小的缓冲区来加快文件传输速度。每个 --transfer 将使用此多内存进行缓冲。
在使用 mount 或 cmount 时,每个打开的文件描述符将使用此多内存进行缓冲。有关详细信息,请参见挂载文档。
设置为 0 以禁用缓冲以减少最小内存使用量。
请注意,缓冲区的内存分配受 –use-mmap 标志的影响。
–cache-dir=DIR
指定 rclone 将使用的缓存目录,以覆盖默认设置。
默认值取决于操作系统:
- Windows
%LocalAppData%\rclone,如果定义了LocalAppData。 - macOS
$HOME/Library/Caches/rclone如果HOME已定义。 - Unix
$XDG_CACHE_HOME/rclone如果XDG_CACHE_HOME已定义,否则$HOME/.cache/rclone如果HOME已定义。 - 在所有操作系统中作为备用方案使用
$TMPDIR/rclone,其中TMPDIR是 –temp-dir 的值。
您可以使用 config paths 命令查看当前值。
缓存目录由 VFS 文件缓存挂载功能大量使用,但也被 rclone 的 serve、GUI 以及其他部分使用。
–check-first
如果设置了此标志,则在 sync 、 copy 或 move 中,rclone 将在进行任何传输之前执行所有检查以确定是否需要传输文件。通常,rclone 会在尽可能早的时候就开始运行传输。
此标志在 I/O 受限的系统中特别有用,因为传输会干扰检查。
在使用 --order-by 时,确保完美的排序也很有帮助。
如果在执行 rclone move 时同时设置了 --check-first 和 --order-by ,rclone 将使用传输线程删除不需要传输的源文件。这将使传输和删除的顺序完美,但会导致传输统计信息中包含比预期更多的条目。
使用此标志可能会消耗更多内存,因为它实际上将 --max-backlog 设置为无限。这意味着在传输开始之前,所有要传输的对象的信息都会被保留在内存中。
–checkers=N
原本仅控制并行运行的文件检查器的数量,例如由 rclone copy . 现在被 rclone 在多个地方用作相当通用的并行控制。
注意:检查器在同步期间对文件进行相等性检查。对于某些存储系统(例如 S3、Swift、Dropbox)来说,这可能需要相当长的时间,因此它们会并行运行。
默认情况下会并行运行 8 个检查器。然而,如果后端响应较慢,您可能需要降低(而不是增加)此默认值,通过设置 --checkers 为 4 或更少线程。特别是在文件检查阶段遇到后端服务器崩溃时(例如在后续或增量备份中,几乎不做文件复制,检查占用了大部分时间),建议采取此措施。仅在密切监控服务器健康状况和文件检查吞吐量的情况下谨慎增加此设置。
-c, –checksum
通常 rclone 会根据文件的修改时间和大小来判断文件是否相同。如果您设置了此标志,则 rclone 会根据文件哈希值和大小来确定文件是否相同。
当远程端不支持设置修改时间,并且需要比仅检查文件大小更准确的同步时,这很有用。
这在在存储相同哈希类型的远程之间进行传输时非常有用,例如 Drive 和 Swift。有关哪些远程支持哪些哈希类型,请参见概览部分中的表格。
例如 rclone --checksum sync s3:/bucket swift:/bucket 会比不带 --checksum 标志运行得快得多。
使用此标志时,rclone 不会更新远程文件的 mtimes,即使它们是错误的,因为它通常会这样做。
–color WHEN
指定何时应向输出添加颜色(以及其他 ANSI 代码)。
AUTO (默认)仅当输出是终端时才允许 ANSI 代码
NEVER 从不允许 ANSI 代码
ALWAYS 总是添加 ANSI 代码,无论输出格式(终端或文件)如何
–compare-dest=DIR
使用 sync 、 copy 或 move DIR 时,除了目标目录外还会检查这些目录。如果在这些目录中找到了与源文件完全相同的文件,则不会从源处复制该文件。这在仅复制上次备份以来更改过的文件时非常有用。
您必须使用与同步目标相同的远程。比较目录不能与目标目录重叠。
请参见 --copy-dest 和 --backup-dir 。
–config=CONFIG_FILE
指定 rclone 配置文件的位置,以覆盖默认值。例如 rclone config --config="rclone.conf" .
确切的默认值由于 rclone 不同版本引入的变化而变得复杂,但在大多数情况下,它就像:
%APPDATA%/rclone/rclone.conf在 Windows~/.config/rclone/rclone.conf在其他
完整的逻辑如下:Rclone 将按照以下优先级顺序查找已存在的配置文件:
rclone.conf(在程序目录中,rclone 可执行文件所在的位置)%APPDATA%/rclone/rclone.conf(仅在 Windows 上)$XDG_CONFIG_HOME/rclone/rclone.conf(在所有系统上运行,包括 Windows)~/.config/rclone/rclone.conf(参见下方对~符号的解释)~/.rclone.conf
如果未找到现有配置文件,则将在以下位置创建一个新的配置文件:
- 在 Windows 上:上面列出的位置 2,除非
APPDATA未定义,在这种极不可能的情况下,使用位置 4。 - 在 Unix 上:如果
XDG_CONFIG_HOME定义,则使用位置 3,否则使用位置 4。 - 在无法创建 rclone 目录时,回退到所有操作系统上的位置 5,但如果也未找到家目录,则会使用当前工作目录相对路径
.rclone.conf作为最后的备选路径。
上面路径中的 ~ 符号代表任何操作系统上当前用户的家目录,其值定义如下:
- 在 Windows:
%HOME%如果定义了,则%USERPROFILE%,否则%HOMEDRIVE%\%HOMEPATH%。 - 在 Unix 上:如果定义了
$HOME,否则通过查看特定于操作系统的用户数据库(例如 passwd 文件)来查找当前用户,否则使用 shell 命令cd && pwd的结果。
如果你运行 rclone config file ,你将看到默认位置在哪里。
由于现有的文件 rclone.conf 总是优先于同一目录下的 rclone 可执行文件,这意味着你可以通过将 rclone 可执行文件下载到一个可写目录,然后在同一目录下创建一个空文件 rclone.conf 来轻松地以“便携”模式运行。
如果位置设置为空字符串 "" 或指向具有名称 notfound 的文件路径,或者在 Windows 上由值 NUL 表示的 os 空设备,在 Unix 系统上由值 /dev/null 表示,那么 rclone 将仅在内存中保留配置文件。
文件格式是基本的 INI:由 [section] 标头开头的文本段落,后跟 key=value 条目,每条目单独占一行。在 rclone 中,每个远程存储由其自己的段落表示,其中段落名称定义了远程存储的名称。选项作为 key=value 条目指定,其中键是不带 --backend- 前缀的选项名称,全部小写,并用 _ 替代 - 。例如,选项 --mega-hard-delete 对应于键 hard_delete 。只能指定后端选项。一个特殊的且必需的键 type 用于标识存储系统,其值是通过命令 rclone help backends 返回的内部小写名称。注释由 ; 或 # 在行首表示。
Example:
1 | [megaremote] |
请注意密码是以混淆形式存储的。此外,许多存储系统使用基于令牌的身份验证而不是密码,这需要额外的步骤。使用交互式命令 rclone config 比手动编辑配置文件更简单、更安全。
配置文件通常包含登录信息,因此应具有受限权限,以便只有当前用户可以读取它。Rclone 在写入文件时会尝试确保这一点。您也可以选择加密文件。
当使用基于令牌的身份验证时,配置文件必须是可写的,因为 rclone 需要更新其中的令牌。
为了减少损坏现有配置文件的风险,rclone 在保存更改时不会直接写入该文件。相反,它会先写入一个新的临时文件。如果存在配置文件,它会在 Unix 系统上尝试将权限镜像到新文件。然后,它会将现有文件重命名以作为备份。接下来,rclone 会将新文件重命名为正确的名称,最后清理备份文件。
如果 rclone 使用的配置文件路径是一个符号链接,那么 rclone 会评估该路径并写入解析后的路径,而不是覆盖符号链接。在上述过程中使用的临时文件(如上所述)将写入解析后的配置文件的同一父目录,但如果该目录本身也是一个符号链接,则不会解析,临时文件将写入目录符号链接的位置。
–contimeout=TIME
设置连接超时时间。这应该遵循 go 时间格式,例如 5s 表示 5 秒, 10m 表示 10 分钟,或 3h30m 。
连接超时时间是 rclone 等待连接到远程对象存储系统的时间。默认情况下,它为 1m 。
–copy-dest=DIR
当使用 sync 、 copy 或 move DIR 时,除了目标目录外还会检查文件。如果在 DIR 中找到了与源文件完全相同的文件,该文件将从 DIR 服务器端复制到目标目录。这对于增量备份非常有用。
正在使用的远程仓库必须支持服务器端复制,并且您必须使用与同步目标相同的远程仓库。比较目录不能与目标目录重叠。
请参见 --compare-dest 和 --backup-dir 。
–dedupe-mode MODE
运行 dedupe 命令的模式。可以是 interactive , skip , first , newest , oldest , rename 。默认值是 interactive 。
有关这些选项的具体含义,请参阅 dedupe 命令。
–default-time TIME
如果文件或目录有修改时间,rclone 可以读取该时间,那么 rclone 将显示这个固定时间。
默认值为 2000-01-01 00:00:00 UTC 。可以通过显示的时间或持续时间选项中的任何方式来配置。
例如 --default-time 2020-06-01 来设置默认时间为 2020 年 6 月 1 日 或 --default-time 0s 来设置默认时间为 rclone 启动时的时间。
–disable FEATURE,FEATURE,..
这禁用了一个用逗号分隔的可选功能列表。例如,要禁用服务器端移动和服务器端复制,请使用:
1 | --disable move,copy |
这些功能可以使用任何大小写。
要查看可以禁用哪些功能的列表,请使用:
1 | --disable help |
远程可以查看的功能以 JSON 格式显示:
1 | rclone backend features remote: |
查看概述功能和可选功能以了解哪些功能做什么。
请注意,某些功能可以通过在它们前面加上 ! 来设置为 true / true / false 功能标志功能。例如, CaseInsensitive 功能可以通过 false 强制设置为 true,通过 --disable CaseInsensitive 强制设置为 true。一般来说,这样做不是一个好主意,但在极端情况下可能会有用。
(请注意, ! 是一个 shell 命令,您需要在类 Unix 平台上使用单引号或反斜杠对其进行转义。)
此标志在调试和极端情况下(例如,Google Drive 将服务器端副本的总体积限制为每天 100 GiB)时可能很有用。
–disable-http2
这会阻止 rclone 在可用时尝试使用 HTTP/2。有时这可以加快传输速度,因为 Go 标准库中存在一些问题。
–dscp VALUE
指定在连接中使用的 DSCP 值或名称。这可以帮助 QoS 系统识别流量类别。BE、EF、DF、LE、CSx 和 AFxx 都是允许的。
参见差分服务的描述以了解此字段。将此设置为 1(LE)以识别流向 SCAVENGER 类别可以避免在网络支持 DiffServ 的情况下占用过多带宽(RFC 8622)。
例如,如果你在路由器上配置了 QoS 来正确处理 LE。运行:
1 | rclone copy --dscp LE from:/from to:/to |
会使优先级低于通常的互联网流量。
此选项对 Windows 没有影响(参见 golang/go#42728)。
-n, –dry-run
进行一次试运行,不进行永久更改。使用此功能可以在不实际执行操作的情况下查看 rclone 会做什么。在设置 sync 命令时非常有用,该命令会在目标位置删除文件。
–expect-continue-timeout=TIME
这指定了在完全写入请求头后,等待服务器的第一响应头的时间,如果请求带有 "Expect: 100-continue" 头。并非所有后端都支持使用此功能。
零表示没有超时,并且会在不等待服务器批准的情况下立即发送主体。此时间不包括发送请求头所需的时间。
默认是 1s 。设置为 0 以禁用。
–error-on-no-transfer
默认情况下,rclone 如果没有错误将退出并返回 0 作为返回码。
此选项允许 rclone 在源和目标之间没有文件传输时返回退出码 9。这使得在脚本中使用 rclone 并在数据被复制时触发后续操作,或者在没有数据复制时跳过操作成为可能。
NB: 启用此选项会将通常非致命的错误变成可能致命的错误 - 请检查并相应地调整您的脚本!
–fix-case
通常,同步到大小写不敏感的目标(如 macOS / Windows)时,如果源文件名和目标文件名仅在大小写上不同但内容相同,则不会导致匹配的文件名。例如,同步 hello.txt 到 HELLO.txt 通常会导致目标文件名保持为 HELLO.txt 。如果设置了 --fix-case ,则 HELLO.txt 将被重命名为 hello.txt 以匹配源文件名。
NB:
- 目录名大小写错误也会被修正
--fix-case将被忽略如果设置了--immutable- 使用
--local-case-sensitive并不推荐;它会导致HELLO.txt被删除! - 旧的目标文件名不能被过滤器排除。特别注意
--files-from,它不尊重--ignore-case! - 对于不支持服务器端移动的远程,
--fix-case将需要下载文件并重新上传。为了避免这种情况,请不要使用--fix-case。
–fs-cache-expire-duration=TIME
使用 API 通过 rclone 时,默认情况下 rclone 会在“fs 缓存”中为创建的远程缓存 5 分钟。这意味着如果你对同一个远程执行重复操作,rclone 就不需要从头开始构建它,这使其更高效。
此标志设置远程缓存的时间。如果你将其设置为 0 (或负数),则 rclone 将根本不缓存远程。
如果使用了一些标志,例如 --backup-dir ,并且此设置为 0 ,rclone 可能会构建两个远程(一个用于源或目标,一个用于 --backup-dir ,在之前可能只构建了一个)。
–fs-cache-expire-interval=TIME
这控制 rclone 检查缓存远程的频率以过期。有关更多信息,请参阅上面的 --fs-cache-expire-duration 文档。默认值为 60s,设置为 0 以禁用过期。
–header
为所有交易添加 HTTP 头。该标志可以重复使用以添加多个头。
如果您只想为上传添加头,请使用 --header-upload ,如果只想为下载添加头,请使用 --header-download 。
此标志对于所有基于 HTTP 的后端都支持,即使 --header-upload 和 --header-download 不支持这些后端,也可以作为这些后端的替代方案(使用时需谨慎)。
1 | rclone ls remote:test --header "X-Rclone: Foo" --header "X-LetMeIn: Yes" |
–header-download
为所有下载交易添加 HTTP 头。标志可以重复以添加多个头。
1 | rclone sync --interactive s3:test/src ~/dst --header-download "X-Amz-Meta-Test: Foo" --header-download "X-Amz-Meta-Test2: Bar" |
在此查看当前支持的后端的 GitHub 问题。
–header-upload
为所有上传交易添加 HTTP 头。标志可以重复以添加多个头。
1 | rclone sync --interactive ~/src s3:test/dst --header-upload "Content-Disposition: attachment; filename='cool.html'" --header-upload "X-Amz-Meta-Test: FooBar" |
在此查看当前支持的后端的 GitHub 问题。
–human-readable
Rclone 命令输出大小(例如字节数)和计数(例如文件数)的值,既可以是原始数字,也可以是人类可读的格式。
在人类可读的格式中,值会根据所附的后缀进行缩放,并且保留三位小数。Rclone 始终使用二进制单位(2 的幂)来表示大小,使用十进制单位(10 的幂)来表示计数。大小的单位前缀根据 IEC 标准表示法,例如 Ki 表示 kibi。与字节单位一起使用时, 1 KiB 表示 1024 字节。在列表类型的输出中,只有值后面附加了单位前缀(例如 9.762Ki ),而在更文本化的输出中,完整的单位会显示出来(例如 9.762 KiB )。对于计数,使用 SI 标准表示法,例如 k 表示 kilo。与文件计数一起使用时, 1k 表示 1000 个文件。
各种列表命令默认输出原始数字。选项 --human-readable 将使它们以人类可读的格式输出值(带有简短的单位前缀)。
about 命令默认输出人类可读的格式,有一个特定于命令的选项 --full 来输出原始数字。
Command size 输出既有人类可读的格式,也有原始数字在同一输出中。
tree 命令也会考虑 --human-readable ,但不会使用其他命令相同的表示方式:它会四舍五入到一位小数,并使用单字母后缀,例如 K 而不是 Ki 。这样做的原因是它依赖于外部库。
交互式命令 ncdu 默认以人类可读格式显示,并响应 u 键以切换人类可读格式。
–ignore-case-sync
使用此选项将导致 rclone 在同步时忽略文件的大小写,因此即使现有文件名相同但大小写不同,文件也不会被复制/同步。
–ignore-checksum
通常 rclone 会检查传输文件的校验和是否匹配,并在不匹配时给出“传输中损坏”的错误。
您可以使用此选项跳过该检查。您应该仅在遇到“传输时损坏”的错误消息并且确定您可能需要传输潜在损坏的数据时使用它。
–ignore-existing
使用此选项将会无条件跳过所有在目标位置已存在的文件,无论这些文件的内容如何。
虽然这不是通常推荐的选项,但在文件由于加密而发生变化的情况下,它可能会很有用。然而,如果传输中断,它无法纠正部分传输错误。
在执行 move / moveto 命令时,此标志会在目标位置已存在同名文件的情况下,保持源位置中跳过的文件不变。
–ignore-size
通常 rclone 会根据文件的修改时间和大小来判断文件是否相同。如果你设置了这个标志,rclone 将只检查修改时间。如果 --checksum 被设置,那么它只会检查校验和。
这还会导致 rclone 在传输后跳过验证文件大小是否相同。
这对于向和从 OneDrive 转移文件可能很有用,因为 OneDrive 有时会错误地报告图像文件的大小(参见 #399 以获取更多信息)。
-I, –ignore-times
使用此选项将导致 rclone 无条件上传所有文件,而不考虑目标上的文件状态。
通常 rclone 会跳过修改时间相同且大小相同的文件(或使用 --checksum 时跳过具有相同校验和的文件)。
–immutable
将源文件和目标文件视为不可变,并禁止修改。
设置此选项后,文件将按要求创建和删除,但现有文件将永远不会被更新。如果源和目标之间的现有文件不匹配,rclone 将给出错误 Source and destination exist but do not match: immutable file modified 。
注意只有用于传输文件的命令(例如 sync , copy , move )会受到此行为的影响,且仅允许修改。文件仍然可以显式地删除(例如 delete , purge )或隐式地删除(例如 sync , move )。如果希望避免删除和修改,请使用 copy --immutable 。
这在保护不可变或追加数据集(特别是备份存档)时非常有用,在这些数据集中,修改意味着损坏且不应传播。
–inplace
标志 --inplace 改变了 rclone 在上传文件到某些后端(具有 PartialUploads 特性标志的后端)时的行为,例如:
- local
- ftp
- sftp
- pcloud
Without --inplace (the default) rclone 将首先上传到一个临时文件,文件扩展名类似于这样,其中 XXXXXX 代表源文件指纹的哈希值, .partial 是 –partial-suffix 值(默认为 .partial )。
1 | original-file-name.XXXXXX.partial |
(rclone 会确保最终名称不会超过 100 个字符,必要时会截断 original-file-name 部分)
当上传完成后,rclone 将重命名 .partial 文件为正确的名称,并在此过程中覆盖任何已存在的文件。如果上传失败,则 .partial 文件将被删除。
这可以防止其他后端用户看到部分上传的文件的新名称,并防止在新文件完全上传之前覆盖旧文件。
如果提供了 --inplace 标志,rclone 将直接上传到最终名称,而不会创建一个 .partial 文件。
这意味着在上传过程中,不完整的文件将在目录列表中可见,并且一旦上传开始,任何现有文件将被覆盖。如果传输失败,则文件将被删除。如果传输失败,这可能会导致现有文件的数据丢失。
注意,在本地文件系统中,如果不使用 --inplace 硬链接(仅限 Unix),文件链接将会被破坏。如果你使用 --inplace ,则无法更新正在使用的可执行文件。
请注意,在 v1.63.0 之前的 rclone 版本中,行为等同于始终提供了 --inplace 标志。
-i, –interactive
此标志可以用于在执行破坏性操作之前要求手动确认。
在学习 rclone 时,尤其是使用 rclone sync 时,建议使用此标志。
例如
1 | $ rclone delete --interactive /tmp/dir |
选项意味着
y: 是的,此操作应继续进行。您也可以按回车键执行此操作。除非您选择s或!,否则每次都会提示您。n: 不,不要执行此操作。除非您选择s或!,否则每次都会提示您。s: 跳过所有后续的此类操作,不再提问。此设置直到 rclone 退出前都有效。如果有其他类型的操作,您将被提示。!: 无需再提问,执行以下所有操作。如果已经决定允许 rclone 执行这种操作,则非常有用。此设置在 rclone 退出前一直有效。如果有其他类型的操作,则会提示确认。q: 立即退出 rclone,以防万一!
–leave-root
在删除目录时不会删除根目录,即使它是空的。
–links / -l
Normally rclone 会忽略符号链接或连接点(在 Windows 下它们的行为类似于符号链接)。
如果你提供此标志,rclone 将从任何支持的后端复制符号链接,并在目标位置以 .rclonelink 后缀存储为文本文件。
文本文件将包含符号链接的目标。
The --links / -l 标志为所有支持的后端和 VFS 启用此功能。还有单独的标志仅用于为 VFS --vfs-links 和本地后端 --local-links 启用此功能(如果需要)。
–log-file=FILE
将 rclone 的所有输出记录到 FILE。此功能默认不启用。与 -v 标志结合使用时,这有助于跟踪同步问题。有关更多信息,请参阅日志记录部分。
如果 FILE 存在,则 rclone 将追加到它。
如果使用 logrotate 程序来管理 rclone 的日志,则应使用 copytruncate 选项,因为 rclone 没有信号来旋转日志。
–log-format LIST
逗号分隔的日志格式选项。接受的选项是 date , time , microseconds , pid , longfile , shortfile , UTC 。其他关键字将被静默忽略。 pid 将日志消息标记为进程标识符,这在使用 rclone mount --daemon 时很有用。其他接受的选项在 go 文档中有解释。默认的日志格式是 “ date , time “。
–log-level LEVEL
这为 rclone 设置日志级别。默认日志级别是 NOTICE 。
DEBUG 等同于 -vv 。它会输出大量的调试信息 - 对于生成 bug 报告和真正了解 rclone 在做什么很有用。
INFO 等同于 -v 。它会输出每次传输的信息,并默认每分钟打印一次统计信息。
NOTICE 是默认的日志级别,如果没有提供日志标志,则使用此级别。在正常工作时输出的内容很少。会输出警告和重要事件。
ERROR 等同于 -q 。仅输出错误消息。
–use-json-log
这将日志格式切换为 JSON 格式。JSON 日志的字段包括 level、msg、source、time。
–low-level-retries NUMBER
这控制 rclone 执行的低级别重试次数。
低级别重试用于重试失败的操作 - 通常是一个 HTTP 请求。例如,上传大文件的一部分。你将在日志中看到带有 -v 标志的低级别重试。
在正常操作中通常不需要更改此值。然而,如果你频繁遇到低级重试,你可能希望降低此值,以便 rclone 更快地转到高级重试(参见 --retries 标志)。
禁用低级别重试与 --low-level-retries 1 。
–max-backlog=N
这是同步/复制/移动队列中待检查或传输的文件的最大允许待处理数量。
这个值可以任意设置得很大。只有在队列被使用时才会使用内存。请注意,当待处理队列被使用时,它将使用大约 N KiB 的内存。
设置这个值较大可以让 rclone 更准确地计算待处理文件的数量,给出更准确的预估完成时间,并使 --order-by 更准确地工作。
设置这个值较小会使 rclone 更加同步于远程目录的列表,这在某些情况下可能是 desirable 的。
将此设置为负数将使回退尽可能大。
–max-delete=N
这告诉 rclone 不要删除超过 N 个文件。如果超过这个限制,将生成一个致命错误,并且 rclone 将停止正在进行的操作。
–max-delete-size=SIZE
Rclone 将在删除文件的总大小达到指定大小时停止删除文件。默认情况下是关闭的。
如果超过这个限制,将生成一个致命错误,并且 rclone 将停止正在进行的操作。
–max-depth=N
这将修改所有命令(除了 purge)的递归深度。
因此,如果您执行 rclone --max-depth 1 ls remote:path ,您将只看到顶层目录中的文件。使用 --max-depth 2 则会显示前两个目录层次中的所有文件,依此类推。
由于历史原因, lsd 命令默认使用 --max-depth 为 1 - 您可以通过命令行标志覆盖这一点。
您可以使用此命令禁用递归(使用 --max-depth 1 )。
注意,如果你使用这个功能与 sync 和 --delete-excluded 一起,未递归遍历的文件将被视为排除在外,并且会在目标位置被删除。如果你不确定会发生什么,请先使用 --dry-run 测试。
–max-duration=TIME
Rclone 将在运行指定时长后停止传输。默认为关闭。
达到限制后所有传输将立即停止。使用 --cutoff-mode 修改此行为。
如果达到时长限制,Rclone 将以退出代码 10 退出。
–max-transfer=SIZE
Rclone 将在达到指定大小时停止传输。默认为关闭。
达到限制后所有传输将立即停止。使用 --cutoff-mode 修改此行为。
如果达到传输限制,Rclone 将以退出代码 8 退出。
–cutoff-mode=hard|soft|cautious
这将修改 --max-transfer 和 --max-duration 的行为。默认为 --cutoff-mode=hard 。
Specifying --cutoff-mode=hard 将在 Rclone 达到限制时立即停止传输。
Specifying --cutoff-mode=soft 将在 Rclone 达到限制时停止启动新的传输。
Specifying --cutoff-mode=cautious 将尝试防止 Rclone 达到限制。仅适用于 --max-transfer
-M, –metadata
设置此标志可使 rclone 复制源文件的元数据到目标文件。对于本地后端,这包括所有权、权限、xattr 等。有关更多信息,请参见元数据部分。
–metadata-mapper SpaceSepList
如果你提供了参数 --metadata-mapper /path/to/program ,则 rclone 会使用该程序将源对象的元数据映射到目标对象。
这个标志的参数应该是一个命令,后面可以跟一个用空格分隔的参数列表。如果参数中包含空格,则将其用 " 包围,如果想要在参数中使用字面的 " ,则将参数用 " 包围并双倍 " 。更多信息请参见 CSV 编码。
1 | --metadata-mapper "python bin/test_metadata_mapper.py" |
这使用基于 JSON 的简单协议,输入来自 STDIN,输出发送到 STDOUT。每当复制文件或目录时都会调用此函数,并且可能会并发调用。
程序的任务是从输入中接收一个元数据块,并将其转换为适合目标后端的元数据块。
程序的输入(通过 STDIN)可能看起来像这样。这为 Metadata 提供了一些上下文,这在某些情况下可能是重要的。
SrcFs是当前对象所在的远程的配置字符串。SrcFsType是源后端的名称。DstFs是用于复制对象的目标远程的配置字符串DstFsType是目标后端的名称Remote是对象相对于根目录的路径Size,MimeType,ModTime是对象的属性IsDir是true如果这是一个目录(尚未实现).ID是对象的源ID,如果已知的话.Metadata是后端特定的元数据,如后端文档中所述.
1 | { |
程序随后应修改输入内容并将其发送到 STDOUT。返回的 Metadata 字段将被完整用于目标对象。注意在这个例子中,我们翻译了用户名和权限,并向描述中添加了一些内容。
1 | { |
元数据也可以在这里移除。
一个示例 Python 程序可能如下所示以实现上述转换。
1 | import sys, json |
您可以在 rclone 源代码中的 bin/test_metadata_mapper.py 中找到这个示例(稍作扩展)。
如果你想在日志中查看元数据映射器的输入和返回的输出,可以使用 -vv --dump mapper 。
请参阅元数据部分以获取更多信息。
–metadata-set key=value
上传时添加元数据 key = value 。此操作可以重复多次。请参阅元数据部分以获取更多信息。
–modify-window=TIME
在检查文件是否被修改时,这是文件可以有最大时间差但仍被视为等效的时间。
默认值为 1ns ,除非被远程覆盖。例如,OS X 只存储修改时间到最近的秒,因此如果你正在读写到一个 OS X 文件系统,这将默认为 1s 。
此命令行标志允许你覆盖计算出的默认值。
–multi-thread-write-buffer-size=SIZE
在使用多个线程传输时,rclone 会在每个线程中缓冲 SIZE 字节的数据后再写入磁盘。
如果底层文件系统不擅长处理大量小文件的分散写入操作,这可以提高性能。因此,如果你发现传输速度受限于磁盘写入速度,可以尝试使用不同的值进行实验。特别是对于磁盘驱动器和远程文件系统,较高的值可能会很有用。
不过,默认值 128k 对于大多数用例来说应该已经足够了,所以在更改之前,请确保网络并不是真正的瓶颈。
最后,大小并不是唯一因素:块大小(或类似的概念)也可能产生影响。在一种情况下,我们观察到 16k 的精确倍数比其他值表现更好。
–multi-thread-chunk-size=SizeSuffix
通常多线程传输的块大小由后端设置。然而,某些后端(如 local 和 smb ,它们实现了 OpenWriterAt 但不实现 OpenChunkWriter )没有自然的块大小。
在这种情况下,此选项的值将被使用(默认值为 64Mi)。
–multi-thread-cutoff=SIZE
当传输大于 SIZE 的文件到支持的后端时,rclone 将使用多个线程来传输文件(默认为 256M)。
支持的后端在概览中标记为 MultithreadUpload 。(它们需要实现 OpenWriterAt 或 OpenChunkWriter 内部接口)。这些包括 local 、 s3 、 azureblob 、 b2 、 oracleobjectstorage 和 smb 。
在本地磁盘上,rclone 预分配文件(使用 fallocate(FALLOC_FL_KEEP_SIZE) 在 Unix 系统上或 NTSetInformationFile 在 Windows 系统上,两者都不消耗时间),然后每个线程直接在文件的正确位置写入。这意味着 rclone 不会生成碎片化或稀疏文件,传输结束时也不会有组装时间。
用于传输的线程数量由 --multi-thread-streams 控制。
使用 -vv 查看线程信息。
这将适用于 sync(同步)、copy(复制)、move(移动)等命令,以及类似的 copyto(复制到)、moveto(移动到)等操作。
如果 --vfs-cache-mode 设置为 writes 或更高模式(如 full),则在使用 rclone mount(挂载)和 rclone serve(服务)时,将会启用多线程传输功能。
注意,这仅适用于支持的后端作为目标,但可以作为任何后端的源使用。
注意,本地到本地的复制不启用多线程复制,因为它们在没有多线程的情况下更快,除非显式设置了 --multi-thread-streams 。
注意,在 Windows 上使用多线程传输到本地磁盘会导致生成的文件为稀疏文件。使用 --local-no-sparse 禁用稀疏文件(可能会导致传输开始时出现长时间延迟)或使用 --multi-thread-streams 0 禁用多线程传输。
–multi-thread-streams=N
当使用多线程传输(参见上方 --multi-thread-cutoff )时,这会设置要使用的流数。设置为 0 以禁用多线程传输(默认值为 4)。
如果后端有 --backend-upload-concurrency 配置(例如 --s3-upload-concurrency ),则如果该配置值大于 --multi-thread-streams 的值或 --multi-thread-streams 未设置时,将使用该配置作为传输数量。
–no-check-dest
--no-check-dest 可以与 move 或 copy 一起使用,并且在复制文件时不会检查目标位置。
这表示:
- 目的地未列出,从而减少 API 调用
- 文件总是被传输
- 这可能会在允许该操作的远程端(例如 Google Drive)导致重复
--retries 1否则,您将在重试时再次传输所有内容
此标志在你知道目标位置没有任何文件的情况下,有助于减少交易次数。
这是一个专门的标志,大多数用户应该忽略它!
–no-gzip-encoding
不要设置 Accept-Encoding: gzip 。这意味着 rclone 不会自动从服务器获取压缩文件。如果你已经将服务器设置为返回带有 Content-Encoding: gzip 的文件,但你上传的是压缩文件,这会很有用。
在正常操作中不需要设置此选项,这样做会降低 rclone 的网络传输效率。
–no-traverse
The --no-traverse 标志控制是否在使用 copy 或 move 命令时遍历目标文件系统。 --no-traverse 不兼容 sync ,如果你提供了 sync ,它将被忽略。
如果只是复制少量文件(或过滤大部分文件),并且/或者目标上有大量文件,那么 --no-traverse 将停止 rclone 列出目标并节省时间。
然而,如果你正在复制大量文件,特别是如果考虑的文件中有很多没有变化且不需要复制,那么就不应该使用 --no-traverse 。
See rclone copy 以了解如何使用它。
–no-unicode-normalization
在同步过程中不要在文件名中规范化 Unicode 字符。
有时,操作系统会将包含 Unicode 部分的文件名以分解形式存储(特别是 macOS)。然后,某些云存储系统会重新组合 Unicode,如果数据被复制回本地文件系统,可能会导致文件重复。
使用此标志将禁用该功能,将每个 Unicode 字符视为独特字符。例如,默认情况下,é 和 é 将被规范化为同一个字符。使用 --no-unicode-normalization 后,它们将被视为独特的字符。
–no-update-modtime
使用此标志时,rclone 不会更新远程文件的修改时间,即使这些时间是错误的,因为它通常会这样做。
如果远程仓库正在与另一个工具同步(例如 Google Drive 客户端),可以使用此选项。
–no-update-dir-modtime
使用此标志时,rclone 不会更新远程目录的修改时间,即使这些时间是错误的,因为它通常会这样做。
–order-by string
The --order-by 标志控制 backlog 中文件的处理顺序,在 rclone sync 、 rclone copy 和 rclone move 中。
排序字符串的构建方式如下。第一部分描述了正在衡量的方面:
size- 按文件大小排序name- 按文件完整路径排序modtime- 按文件修改日期排序
This can have a modifier appended with a comma:
ascending或asc- 顺序处理,使得最小的(或最旧的)先处理descending或desc- 按照最大的(或最新的)项优先处理的顺序mixed- 一些线程按最小项优先处理,而其他线程按最大项优先处理的顺序
如果修饰符是 mixed ,则可以有一个可选的百分比(默认值为 50 ),例如 size,mixed,25 ,这意味着 25%的线程应该处理最小的项,75%的线程处理最大的项。首先处理最小项的线程将始终优先处理最小项,同样地,首先处理最大的线程将始终优先处理最大的项。 mixed 模式在传输混合大小文件时可以减少传输时间 - 大文件将被保证分配上传线程和带宽,而小文件将被连续处理。
如果没有提供修改器,则顺序为 ascending 。
例如
--order-by size,desc- 先发送最大的文件--order-by modtime,ascending- 先发送最旧的文件--order-by name- 按路径字母顺序先发送文件
如果未提供 --order-by 标志或提供的值为空字符串,则将使用默认排序,即按扫描顺序。使用 --checkers 1 时,这通常是按字母顺序,但是使用默认 --checkers 8 时,排序会有些随机。
Limitations 限制
未对 --order-by 标志进行单独的数据遍历。这意味着如果
- 没有待处理的文件或源数据尚未完全扫描,则可能会将一些文件按指定顺序之外的顺序进行传输
- backlog 中的文件数量超过 –max-backlog
Rclone 将尽最大努力传输它最好的文件,因此实际上这不应该引起问题。 --order-by 更多的是一个尽力而为的标志,而不是完美的排序标志。
如果您需要完美的排序,那么您需要指定 –check-first,这将首先找到所有需要传输的文件,然后再进行传输。
–partial-suffix
当不使用 –inplace 时,rclone 会使用 --partial-suffix 作为临时文件的后缀。
后缀长度限制为 16 个字符。
默认是 .partial 。
–password-command SpaceSepList
此标志提供一个程序,在运行时应提供配置密码。这是一种替代方法,用于 rclone 提示输入密码或设置 RCLONE_CONFIG_PASS 变量。它还用于首次设置配置密码时。
此参数应为一个命令,带有空格分隔的参数列表。如果其中一个参数包含空格,则将其包含在 " 中,如果您希望在参数中使用字面 " ,则将参数包含在 " 中并双倍 " 。有关更多信息,请参见 CSV 编码。
Eg
1 | --password-command "echo hello" |
请注意,在更改配置密码时,环境变量 RCLONE_PASSWORD_CHANGE=1 将被设置。这可以用于区分首次解密配置文件与新密码。
See the Configuration Encryption for more info.
See a Windows PowerShell example on the Wiki.
-P, –progress
这个标志使 rclone 在终端中的静态块中更新统计信息,提供传输的实时概览。
任何日志消息将在静态块上方滚动。日志消息将推动静态块移动到终端底部,并停留在那里。
通常每 500 毫秒更新一次,但可以通过 --stats 标志覆盖这个周期。
可以通过 --stats-one-line 标志使用更简单的显示方式。
要更改文件名显示长度(以适应不同终端宽度),请参阅 --stats-file-name-length 选项。默认输出格式化为 80 字符宽的终端。
注意:在 Windows 上直到这个 bug 被修复之前,所有非 ASCII 字符将在 --progress 使用时被替换为 . 。
–progress-terminal-title
当此标志与 -P/--progress 一起使用时,将会将字符串 ETA: %s 打印到终端标题中。
-q, –quiet
此标志将限制 rclone 的输出仅包含错误消息。
–refresh-times
可以使用 --refresh-times 标志在后端不支持哈希时更新现有文件的修改时间,使其与后端保持同步。
如果您上传了带有错误时间戳的文件,而现在希望纠正它们,这将非常有用。
此标志仅对不支持哈希的目标有用(例如 crypt )。
此功能可以用于任何同步命令 sync , copy 或 move 。
要使用此标志,您需要进行修改时间同步(因此不使用 --size-only 或 --checksum )。当使用 --size-only 或 --checksum 时,此标志将没有任何效果。
如果在 rclone 准备上传文件时使用此标志,它将检查目标上是否存在具有相同大小(如果可用则包括校验和)但时间戳不同的现有文件。如果校验和匹配,则 rclone 将更新目标文件的时间戳,而不是重新上传文件。如果校验和不匹配,则 rclone 将上传新文件。如果校验和不存在(例如在 crypt 后端上),则 rclone 将更新时间戳。
注意某些远程存储无法在不重新上传文件的情况下设置修改时间,因此在这些远程存储上这个标志就没那么有用。
通常,如果你在进行修改时间同步,rclone 会在远程存储支持校验和且文件的校验和匹配的情况下更新修改时间。然而,如果校验和不存在,则 rclone 会上传文件而不是设置时间戳,因为这是安全的行为。
–retries int
如果同步失败了这个次数后才重试整个同步(默认为 3 次)。
有些远程连接可能不可靠,几次重试有助于获取因错误而未传输的文件。
使用 --retries 1 禁用重试。
–retries-sleep=TIME
这设置了每次重试之间的间隔时间,由 --retries 指定。
默认值为 0 。使用 0 以禁用。
–server-side-across-configs
允许服务器端操作(例如复制或移动)在不同的配置之间工作。
如果您希望在使用相同后端但配置不同的两个远程之间进行服务器端复制或移动,这可能会很有用。
注意这默认是未启用的,因为 rclone 无法轻松判断它在任何两个配置之间是否有效。
–size-only
通常 rclone 会检查文件的修改时间和大小来判断它们是否相等。如果你设置了这个标志,rclone 将只检查大小。
这对于从 Dropbox 转移文件时很有用,因为桌面同步客户端修改了文件但没有像 rclone 那样以相同的方式设置校验和或修改时间。
–stats=TIME
具有传输数据功能的命令( sync , copy , copyto , move , moveto )将在固定的时间间隔内打印数据传输统计信息以显示其进度。
这设置了间隔。
默认值为 1m 。使用 0 以禁用。
如果设置了统计间隔,所有命令都可以显示统计信息。这在运行其他命令时可能很有用,例如 check 或 mount 。
默认情况下,统计信息会在 INFO 级别记录,这意味着它们不会在默认日志级别 NOTICE 中显示。使用 --stats-log-level NOTICE 或 -v 可以使它们显示。有关日志级别的更多信息,请参见日志记录部分。
请注意,在 macOS 上,你可以发送一个 SIGINFO 信号(通常在终端中是 ctrl-T),以使统计信息立即打印。
–stats-file-name-length integer
默认情况下, --stats 输出会截断超过 40 个字符的文件名和路径。这相当于提供 --stats-file-name-length 40 。使用 --stats-file-name-length 0 可以禁用文件名的任何截断。
–stats-log-level string
日志级别以显示 --stats 输出。这可以是 DEBUG , INFO , NOTICE ,或 ERROR 。默认值是 INFO 。这意味着在默认的日志级别下,统计信息不会显示 - 如果你想显示它们,请使用 NOTICE 。有关日志级别的更多信息,请参阅日志记录部分。
–stats-one-line
当指定了此选项时,rclone 将统计信息凝缩为单行,只显示最重要的统计信息。
–stats-one-line-date
当指定了此选项时,rclone 启用单行统计信息并在显示前添加日期字符串。默认值为 2006/01/02 15:04:05 -
–stats-one-line-date-format
当此选项被指定时,rclone 会启用单行统计信息,并在显示内容前加上用户提供的日期字符串。日期字符串必须用引号括起来。遵循 golang 的日期格式规范。
–stats-unit=bits|bytes
默认情况下,数据传输速率将以每秒字节的形式打印。
此选项允许以每秒位的形式打印数据速率。
数据传输量仍然会以字节为单位报告。
速率以二进制单位报告,而不是 SI 单位。因此 1 Mbit/s 等于 1,048,576 bit/s,而不是 1,000,000 bit/s。
默认是 bytes 。
–suffix=SUFFIX
使用 sync , copy 或 move 任何会被覆盖或删除的文件将会添加后缀。如果添加后缀后有同名文件(路径相同),则会被覆盖。
正在使用的远程仓库必须支持服务器端移动或复制,并且您必须使用与同步目标相同的远程仓库。
此功能用于在当前目录或与 --backup-dir 一起使用时为文件添加后缀。更多信息请参见 --backup-dir 。
例如
1 | rclone copy --interactive /path/to/local/file remote:current --suffix .bak |
will copy /path/to/local 到 remote:current ,但对任何会被更新或删除的文件会在文件名后添加 .bak。
如果使用 rclone sync 和 --suffix 但不使用 --backup-dir ,则建议添加一个过滤规则以排除后缀,否则 sync 会删除备份文件。
1 | rclone sync --interactive /path/to/local/file remote:current --suffix .bak --exclude "*.bak" |
–suffix-keep-extension
当使用 --suffix 时,设置此选项会使 rclone 在备份文件时将 SUFFIX 放在文件扩展名之前而不是之后。
所以假设我们有 --suffix -2019-01-01 ,没有标志 file.txt 会被备份到 file.txt-2019-01-01 ,带有标志则会被备份到 file-2019-01-01.txt 。这可以帮助确保带有后缀的文件仍然可以打开。
如果一个文件有两个(或多个)扩展名,并且第二个(或后续)扩展名被识别为有效的 MIME 类型,那么后缀将出现在该扩展名之前。所以 file.tar.gz 会被备份到 file-2019-01-01.tar.gz 而 file.badextension.gz 会被备份到 file.badextension-2019-01-01.gz 。
–syslog
在支持的 OS(不是 Windows 或 Plan9)上,将所有日志输出发送到 syslog。
这可以在脚本中运行 rclone 或 rclone mount 中使用。
–syslog-facility string
如果使用 --syslog ,这将设置 syslog 的设施(例如 KERN , USER )。参见 man syslog 以获取可能的设施列表。默认设施是 DAEMON 。
–temp-dir=DIR
指定 rclone 将使用的临时文件目录,以覆盖默认设置。请确保该目录存在并且具有可访问权限。
默认情况下将使用操作系统的临时目录:
- 在 Unix 系统上,如果非空,则为
$TMPDIR,否则为/tmp。 - 在 Windows 上,将使用
%TMP%、%TEMP%、%USERPROFILE%中的第一个非空值,或者 Windows 目录。
当使用此选项覆盖默认设置时,指定的路径将被设置为环境变量 TMPDIR 的值,在 Unix 系统上为 TMPDIR,在 Windows 上为 TMP 和 TEMP 。
您可以使用 config paths 命令查看当前值。
–tpslimit float
将每秒交易限制为这个数字。默认值为 0,表示每秒无限交易。
交易大致定义为一个 API 调用;其确切含义将取决于后端。对于基于 HTTP 的后端,它是一个 HTTP PUT/GET/POST 等及其响应。对于 FTP/SFTP,它是一个通过 TCP 的往返交易。
例如,要将 rclone 限制为每秒 10 笔交易,请使用 --tpslimit 10 ,或要每 2 秒执行 1 笔交易,请使用 --tpslimit 0.5 。
当从 rclone 每秒传输的次数导致云存储提供商出现问题(例如,封禁或速率限制)时使用。
这对于 rclone mount 来控制使用它的应用程序的行为非常有用。
此限制适用于所有基于 HTTP 的后端以及 FTP 和 SFTP 后端。它不适用于本地后端或 Storj 后端。
See also --tpslimit-burst.
–tpslimit-burst int
--tpslimit 的最大交易突发量(默认 1 )。
正常情况下 --tpslimit 每秒将执行指定数量的交易。但是,如果你提供 --tps-burst ,rclone 可以在空闲时保存一些交易,从而在一段时间内爆发性地执行最多参数指定的数量的交易。
例如,如果你提供 --tpslimit-burst 10 ,那么如果 rclone 已经闲置超过 10* --tpslimit ,它可以在限制再次生效前快速执行 10 次交易。
这可以用来提高 --tpslimit 的性能,而不会改变每秒平均交易次数。
–track-renames
默认情况下,rclone 不会跟踪重命名的文件,所以如果你在本地重命名一个文件然后同步到远程,rclone 将会在远程删除旧文件并上传一个新副本。
一个带有 --track-renames 的 rclone 同步运行得像一个普通的同步,但它会跟踪存在于目标但不存在于源中的对象(这些对象通常会被删除),以及存在于源但不存在于目标中的对象(这些对象通常会被转移)。这些对象然后成为重命名的候选对象。
在同步后,rclone 使用指定的 --track-renames-strategy 匹配仅源和仅目标的对象,并且要么重命名目标对象,要么转移源并删除目标对象。 --track-renames 类似于 rclone 所有同步操作的无状态。
要使用此标志,目标必须支持服务器端复制或服务器端移动,并且要使用基于哈希的 --track-renames-strategy (默认值),源和目标必须具有兼容的哈希。
如果目标不支持服务器端复制或移动,rclone 将退回到默认行为并在控制台记录一个错误级别消息。
加密的目标地址目前不被 --track-renames 支持,如果 --track-renames-strategy 包含 hash 。
请注意 --track-renames 与 --no-traverse 不兼容,并且它会使用额外的内存来跟踪所有重命名候选者。
请注意 --track-renames 与 --delete-before 不兼容,将选择 --delete-after 而不是 --delete-during 。
–track-renames-strategy (hash,modtime,leaf,size)
此选项更改 --track-renames 的文件匹配标准。
匹配由这些标记的逗号分隔选择控制:
modtime- 文件的修改时间 - 并非所有后端都支持hash- 文件内容的哈希值 - 并非所有后端都支持leaf- 文件名,不包括目录名size- 文件大小(始终启用)
默认选项是 hash 。
使用 --track-renames-strategy modtime,leaf 会根据文件的修改时间、文件名的叶子部分和文件大小来匹配文件。
使用 --track-renames-strategy modtime 或 leaf 可以在加密目标上启用 --track-renames 支持。
注意, hash 策略不支持加密的目标。
–delete-(before,during,after)
此选项允许您指定在同步文件夹时目标上的文件何时被删除。
指定值 --delete-before 将在开始传输任何新文件或更新文件之前删除目标上的所有文件,但不删除源上的文件。这将使用两次文件系统的遍历,一次用于删除操作,一次用于复制操作。
指定 --delete-during 将在检查和上传文件时删除文件。这是最快的选择,使用最少的内存。
指定 --delete-after (默认值)将延迟文件删除,直到所有新/更新的文件已成功传输。要删除的文件在复制过程中收集,然后在复制过程成功完成后删除。要删除的文件保留在内存中,因此此模式可能会使用更多的内存。这是最安全的模式,因为它只会删除在那之后没有发生错误的文件。如果在删除操作开始之前发生了错误,您将收到消息 not deleting files as there were IO errors 。
–fast-list
当进行涉及目录列表的操作(例如 sync , copy , ls - 实际上几乎每一个命令)时,rclone 有不同的策略可供选择。
基本策略是列出一个目录并在处理该目录之前处理更多的目录列表以处理任何子目录。这是一个强制性的后端功能,称为 List ,这意味着所有后端都支持它。该策略使用少量内存,并且由于可以并行化,因此对于涉及列表结果处理的操作非常快。
Some backends 提供了替代策略的支持,其中目录下的所有文件可以在一次(或少量几次)事务中列出。Rclone 通过一个可选后端功能 ListR 来支持这种替代策略。你可以在存储系统概述文档的可选功能部分看到哪些后端启用了该功能(这些通常是基于桶的后端,例如 S3、B2、GCS、Swift)。这种策略在事务收费或严重限制的后端上可以减少事务次数,这对于高度递归的操作非常重要。由于事务次数较少,这可能更快;但由于不能并行化,也可能更慢,这取决于不同的参数,并且如果 rclone 需要将整个列表保留在内存中,可能需要更多的内存。
Which listing strategy rclone 选择给定操作的策略是复杂的,但总体来说它会尝试选择最好的。它会在不需要将列出的文件存储在内存中的情况下优先选择 ListR ,例如对于不限定递归层级的 ls 命令变体。在其他情况下,它会优先选择 List ,例如对于 sync 和 copy ,在这种情况下它需要将列出的文件保留在内存中,并在对它们进行操作时并行化可能是一个巨大的优势。
Rclone 无法考虑所有相关参数来决定最佳策略,因此允许你通过两种方式影响选择:你可以通过禁用功能来阻止 rclone 使用 ListR ,使用–disable 选项( --disable ListR ),或者允许 rclone 在通常由于更高的内存使用而不会选择使用 ListR 的情况下使用 --fast-list 选项。无论使用哪种方式,Rclone 都应该始终产生相同的结果。在不支持 ListR 的远程上使用 --disable ListR 或 --fast-list 不会产生任何效果,rclone 将会忽略它们。
一个经验法则是,如果你为交易付费并且可以将整个同步列表放入内存中,那么建议使用 --fast-list 。如果你有一个非常大的同步任务,那么不要使用 --fast-list ,否则你可能会耗尽内存。先运行一些测试并比较结果,如果不确定的话,就保留默认设置,让 rclone 决定,即不使用 --fast-list 。
–timeout=TIME
此设置 IO 空闲超时。如果传输已开始但随后闲置时间过长,则认为传输已损坏并断开连接。
默认是 5m 。设置为 0 以禁用。
–transfers=N
同时运行的文件传输数量。有时将此值设置为较小的数字可能会有所帮助,如果远程端频繁出现超时问题;或者如果您有大量的带宽并且远程端非常快,可以将此值设置为较大的数字。
默认情况下,同时运行 4 个文件传输。
如果你想控制单文件传输,请查看–multi-thread-streams。
-u, –update
这会强制 rclone 跳过在目标上已存在且修改时间晚于源文件的任何文件。
这在向不直接支持修改时间的远程传输时很有用(或使用 --use-server-modtime 以避免额外的 API 调用),因为它比 --size-only 检查更准确,比使用 --checksum 更快。在这样的远程上(或使用 --use-server-modtime 时),检查的时间是上传时间。
如果现有目标文件的修改时间早于源文件,则在大小不同时会被更新。如果大小相同,则在校验和不同或不可用时会被更新。
如果现有目标文件的修改时间(在计算的修改窗口内)与源文件相同,则如果文件大小不同,将更新该文件。在这种情况下不会检查校验和,除非提供了 --checksum 标志。
在所有其他情况下,文件将不会被更新。
考虑使用 --modify-window 标志来补偿源端和后端之间的时间偏差,对于不支持修改时间的后端,而是使用上传时间。但是,如果后端不支持校验和,请注意在时间偏差窗口内进行同步或复制仍可能导致额外的数据传输以确保安全。
–use-mmap
如果设置了此标志,则 rclone 将在基于 Unix 的平台上使用 mmap 分配的匿名内存,在 Windows 上使用 VirtualAlloc 分配其传输缓冲区(大小由 --buffer-size 控制)。这样分配的内存不会放在 Go 堆上,并且在使用完毕后可以立即返回给 OS。
如果未设置此标志,则 rclone 将使用 Go 内存分配器分配和释放缓冲区,可能会使用更多的内存,因为内存页面返回给操作系统不那么积极。
这可能在所有平台上都不适用,因此默认情况下是禁用的;将来可能会默认启用。
–use-server-modtime
某些对象存储后端(例如 Swift、S3)不保留文件修改时间(modtime)。在这些后端上,rclone 将原始的 modtime 作为对象的附加元数据存储。默认情况下,当操作需要 modtime 时,它会进行一次 API 调用来检索元数据。
使用此标志以禁用额外的 API 调用,并依赖服务器的修改时间。在本地到远程同步使用 --update 的情况下,知道本地文件比上次上传到远程的时间更新就足够了。在这种情况下,此标志可以加快过程并减少必要的 API 调用次数。
在同步操作中使用此标志而不同时使用 --update 将会导致所有在最后一次上传时间之外被修改的文件再次被上传,这可能不是你想要的结果。
-v, -vv, –verbose
With -v rclone 将会告诉你每次传输的文件以及一些重要的事件。
当 -vv 时,rclone 将变得非常详细,会告诉你它考虑的每个文件以及传输的文件。请使用此设置发送 bug 报告时附带日志。
当设置为环境变量时,使用 RCLONE_VERBOSE=1 或 RCLONE_VERBOSE=2 代表 -v 和 -vv 分别。
-V, –version
打印版本号
SSL/TLS 选项
The 出 going SSL/TLS 连接 rclone 创建的可以使用这些选项进行控制。例如,这在使用 HTTP 或 WebDAV 后端时非常有用。Rclone HTTP 服务器有自己的 SSL/TLS 配置,您可以在其文档中找到相关内容。
–ca-cert 证书数组
这会加载 PEM 编码的证书颁发机构证书,并使用这些证书来验证 rclone 连接的服务器的证书。
如果你使用本地 CA 生成了证书,那么你需要这个标志来连接使用这些证书的服务器。
–client-cert 字符串
This loads the PEM encoded client side certificate.
这用于双向 TLS 认证。
使用此功能时,也需要 --client-key 标志。
–client-key string
这加载了 PEM 编码的客户端私钥,用于双向 TLS 认证。与 --client-cert 一起使用。
–no-check-certificate=true/false
--no-check-certificate 控制客户端是否验证服务器的证书链和主机名。如果 --no-check-certificate 为 true,则 TLS 会接受服务器提供的任何证书以及该证书中的任何主机名。在这种模式下,TLS 暴露于中间人攻击。
此选项默认为 false 。
仅用于测试。
配置加密
您的配置文件包含登录到您的云服务的信息。这意味着您应该将 rclone.conf 文件保存在安全的位置。
如果在无法做到这一点的环境中,你可以为你的配置添加一个密码。这意味着每次启动 rclone 时你都必须输入密码。
为您的 rclone 配置添加密码,请执行 rclone config 。
1 | >rclone config |
Go into s, Set configuration password:
1 | e/n/d/s/q> s |
现在您的配置已加密,每次启动 rclone 时都需要输入密码。详情请参见下方。在同一个菜单中,您可以更改密码或完全移除配置中的加密。
如果您丢失密码,就无法恢复配置。
你可以也使用
- rclone config encryption set 用于直接设置配置加密
- rclone config encryption remove 用于移除加密
- rclone config encryption check 用于检查是否正确加密。
rclone 使用 nacl secretbox,后者使用 XSalsa20 和 Poly1305 对您的配置进行加密和身份验证,使用密钥密码学。密码会被 SHA-256 哈希,生成 secretbox 的密钥。哈希后的密码不会被存储。
虽然这提供了非常好的安全性,但我们不建议将加密的 rclone 配置存储在公共位置,如果其中包含敏感信息,可能除非您使用非常强的密码。
如果在您的环境中安全,您可以设置 RCLONE_CONFIG_PASS 环境变量以包含您的密码,在这种情况下,它将用于解密配置。
您可以在脚本中为会话设置此内容。对于类 Unix 系统,请将此内容保存到一个名为 set-rclone-password 的文件中:
1 | #!/bin/echo Source this file don't run it |
然后在需要使用该文件时 sourcing 它。从 shell 中,您会执行 source set-rclone-password 。它会要求您输入密码并将其设置为环境变量。
提供密码的另一种方法是提供一个脚本,该脚本可以从其他地方获取密码并在标准输出中打印。此脚本应具有完整的路径名,并且不应依赖于任何环境变量。您可以使用 --password-command="..." 命令行参数或环境变量 RCLONE_PASSWORD_COMMAND 提供此脚本。
一个有用的例子是使用 passwordstore 应用程序检索密码:
1 | export RCLONE_PASSWORD_COMMAND="pass rclone/config" |
如果 passwordstore 密码管理器保管了 rclone 配置的密码,则使用脚本方法意味着密码主要受到 passwordstore 系统的保护,并且密码不会嵌入到脚本中,也不会通过标准命令进行检查。在长时间运行的 rclone 会话中,密码可能会无意中被记录在日志文件或终端滚动缓冲区等地方。使用脚本方法提供密码可以大大增强配置密码的安全性。
如果在脚本中运行 rclone,除非使用了 --password-command 方法,否则可能需要禁用密码提示。要实现这一点,请将参数 --ask-password=false 传递给 rclone。这将使 rclone 在 RCLONE_CONFIG_PASS 不包含有效密码且 --password-command 未提供时失败,而不是询问密码。
每当运行可能受配置文件选项影响的命令时,rclone 将根据上述规则查找现有文件并加载任何找到的内容。如果找到加密文件,这将包括解密它,可能会导致密码提示。当执行您知道实际上不使用此类配置文件中的任何内容的命令行时,可以通过覆盖位置来避免加载它,例如使用文档中所述的特殊值之一,用于仅内存配置。由于仅后端选项可以存储在配置文件中,因此对于不操作后端的命令(例如 completion ),通常不需要这样做。然而,对于一般情况下操作后端但未引用存储远程的命令(例如列出本地文件系统路径或连接字符串)来说,这将是相关的: rclone --config="" ls .
配置加密速查表
您可以快速应用配置加密,而无需静态文本的磁盘上存储或传输。详细说明如下:
Mac
- 生成并存储一个密码
1 | security add-generic-password -a rclone -s config -w $(openssl rand -base64 40) |
- 将检索指令添加到你的 .zprofile / .profile
1 | export RCLONE_PASSWORD_COMMAND="/usr/bin/security find-generic-password -a rclone -s config -w" |
Linux
- Prerequisite
Linux 没有自带密码管理器。让我们使用包管理器安装“pass”工具,例如 apt install pass , yum install pass 等;然后初始化一个密码存储:
1 | pass init rclone |
- 生成并存储一个密码
1 | echo $(openssl rand -base64 40) | pass insert -m rclone/config |
- 添加检索指令
1 | export RCLONE_PASSWORD_COMMAND="/usr/bin/pass rclone/config" |
Windows
- 生成并存储密码
1 | New-Object -TypeName PSCredential -ArgumentList "rclone", (ConvertTo-SecureString -String ([System.Web.Security.Membership]::GeneratePassword(40, 10)) -AsPlainText -Force) | Export-Clixml -Path "rclone-credential.xml" |
- 添加密码恢复指令
1 | [Environment]::SetEnvironmentVariable("RCLONE_PASSWORD_COMMAND", "[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR((Import-Clixml -Path "rclone-credential.xml").Password))") |
加密配置文件(所有系统)
- 执行
rclone config->s - 从前面的步骤中添加/更新密码
开发者选项
这些选项在开发或调试 rclone 时很有用。还有一些针对特定远程的选项没有在此文档中记录,这些选项用于测试。这些选项以远程名称开头,例如 --drive-test-option ,请参见相应远程的文档。
–cpuprofile=FILE
将 CPU 调试信息写入文件。这可以使用 go tool pprof 进行分析。
–dump 标志,标志,标志
The --dump 标志接受用逗号分隔的标志列表,以 dump 信息。
请注意,一些标题(如示例中的 Accept-Encoding )可能在请求和响应中并不正确,如果 go 标准库启用了自动 gzip 编码,则响应中可能不会显示 Content-Encoding 。在这种情况下,请求的主体将在显示前被 ungzip 解压。
可用的标志有:
–dump headers
输出 HTTP 标题,移除了 Authorization: 这几行。可能仍包含敏感信息。可能非常冗长。仅用于调试。
Use --dump auth 如果您确实想要 Authorization: 标题。
–dump bodies
输出 HTTP 头和体 - 可能包含敏感信息。可能会非常详细。仅用于调试。
请注意,体内容会缓存在内存中,因此不要用于巨大的文件。
–dump bodies
Like --dump bodies 但会输出请求体和响应头。对于调试下载问题很有用。
–dump requests
Like --dump bodies 但会输出响应体和请求头。对于调试上传问题很有用。
–dump auth
Dump HTTP 头部 - 将包含敏感信息如 Authorization: 头部 - 使用 --dump headers 可以不包含 Authorization: 头部来导出。可能会非常冗长。仅在调试时有用。
–dump filters
把过滤器输出到输出中。有助于查看具体是哪些包含和排除选项在过滤。
–dump goroutines
这在命令结束时将正在运行的 goroutine 列表输出到标准输出。
–dump openfiles
这在命令结束时将打开的文件列表输出到标准输出。它使用了 lsof 命令来完成,因此你需要安装它才能使用。
–dump mapper
这显示了通过 --metadata-mapper 与程序一起发送和从程序接收到的 JSON 块。这在调试元数据映射器接口时可能很有用。
–memprofile=FILE
将内存配置文件写入文件。这可以使用 go tool pprof 进行分析。
Filtering 过滤
For the filtering options
--delete-excluded--filter--filter-from--exclude--exclude-from--exclude-if-present--include--include-from--files-from--files-from-raw--min-size--max-size--min-age--max-age--dump filters--metadata-include--metadata-include-from--metadata-exclude--metadata-exclude-from--metadata-filter--metadata-filter-from
See the filtering section.
Remote control 远程控制
For the remote control options and for instructions on how to remote control rclone
--rc- and anything starting with
--rc-
See the 远程控制部分。
Logging 日志记录
rclone 有 4 级日志记录, ERROR , NOTICE , INFO 和 DEBUG 。
默认情况下,rclone 将日志记录到标准错误。这意味着你可以重定向标准错误并仍然看到 rclone 命令的正常输出(例如 rclone ls )。
默认情况下,rclone 将生成 Error 和 Notice 级消息。
如果使用 -q 标志,rclone 将只生成 Error 消息。
如果使用 -v 标志,rclone 将生成 Error 、 Notice 和 Info 消息。
如果使用 -vv 标志,rclone 将生成 Error 、 Notice 、 Info 和 Debug 消息。
你也可以使用 --log-level 标志来控制日志级别。
如果您使用 --log-file=FILE 选项,rclone 将重定向 Error 、 Info 和 Debug 消息以及标准错误到 FILE。
如果您使用 --syslog 标志,则 rclone 将记录到 syslog,并且 --syslog-facility 控制它使用的日志设施。
Rclone 在所有日志消息前加上其级别的大写字母,例如 INFO,这使得使用 grep 命令从日志文件中筛选不同种类的信息变得非常容易。
Metrics 统计信息
Rclone 可以以 OpenMetrics/Prometheus 格式发布指标。
要启用指标端点,请使用 --metrics-addr 标志。如果提供了 --rc-addr 和 --rc 标志或使用 rclone rcd --rc-enable-metrics ,指标也可以发布在 --rc-addr 端口上。
Rclone 为指标 HTTP 端点提供了广泛的配置选项。这些设置按指标部分分组,并具有前缀 --metrics-* 。
当使用 --rc-enable-metrics 启用指标时,它们将与 rc API 同一端口发布。在这种情况下, --metrics-* 标志将被忽略,并且 HTTP 端点配置将由 --rc-* 参数管理。
Exit Code 退出码
如果在命令执行过程中发生任何错误,rclone 将以非零退出码退出。这允许脚本检测 rclone 操作是否失败。
在启动阶段,如果检测到配置中的错误,rclone 将立即退出。退出前总是会有一个日志消息。
当 rclone 运行时,它会累积错误,并且只有在重试后仍然有失败的传输时,才会以非零退出码退出。对于每个计数的错误,都会有一个高优先级的日志消息(使用 -q 可见),显示错误信息和导致问题的文件。在开始重试时也会显示一个高优先级的消息,这样用户可以看到任何之前的错误消息在重试后可能不再有效。如果 rclone 已经进行了重试,它会在重试成功时记录一个高优先级的消息。
List of exit codes 退出码列表
0- 成功1- 未分类的错误2- 语法或使用错误3- 目录未找到4- 文件未找到5- 临时错误(多次重试可能会修复的错误)(重试错误)6- 较不严重的错误(如来自 Dropbox 的 461 错误)(非重试错误)7- 无法恢复的错误(即使增加重试次数也无法修复,例如账户被暂停)(无法恢复的错误)8- 转移超出限制 - 达到 –max-transfer 设置的限制9- 操作成功,但未传输任何文件(需要--error-on-no-transfer)10- 超出持续时间限制 - 达到 –max-duration 设置的限制
Environment Variables 环境变量
rclone 可以完全使用环境变量进行配置。这些环境变量可以用于设置选项的默认值或配置文件条目。
Options 选项
每项 rclone 都可以通过环境变量来设置默认值。
要找到环境变量的名称,首先,取长选项名称,去掉前缀 -- ,将 - 替换为 _ ,转换为大写,并在前面加上 RCLONE_ 。
例如,要始终设置 --stats 5s ,请设置环境变量 RCLONE_STATS=5s 。如果您在命令行中设置了 stats,这将覆盖环境变量设置。
或者要始终在驱动器 --drive-use-trash 中使用回收站,设置 RCLONE_DRIVE_USE_TRASH=true 。
冗余略有不同,环境变量等价于 --verbose 或 -v ,或者对于 RCLONE_VERBOSE=1 , -vv 。
选项解析器和环境变量使用相同的格式,因此它们的形式完全相同。
通过 -vv 标志可以查看由环境变量设置的选项,例如 rclone version -vv 。
可以多次出现的选项(类型 stringArray )在处理时略有不同,因为环境变量只能定义一次。为了允许简单机制添加一个或多个项目,输入被视为 CSV 编码的字符串。例如
| 环境变量 | 等效选项 |
|---|---|
RCLONE_EXCLUDE="*.jpg" |
--exclude "*.jpg" |
RCLONE_EXCLUDE="*.jpg,*.png" |
--exclude "*.jpg" --exclude "*.png" |
RCLONE_EXCLUDE='"*.jpg","*.png"' |
--exclude "*.jpg" --exclude "*.png" |
RCLONE_EXCLUDE='"/directory with comma , in it /**"' |
`–exclude “/目录中包含逗号 , /** |
如果 stringArray 选项被定义为环境变量和命令行选项,则所有值都将被使用。
Config file 配置文件
您可以在每个远程基础上为配置文件中的值设置默认值。配置项的名称在每个后端对应的页面中都有文档说明。
要找到需要设置的环境变量名称,请将 RCLONE_CONFIG_ + 远程名称 + _ + 配置文件选项名称 组合起来并全部转换为大写。注意这里的一个含义是远程名称必须能够转换成有效的环境变量名称,因此只能包含字母、数字或 _ (下划线)字符。
例如,要配置一个名为 mys3: 的 S3 远程且不使用配置文件(使用类 Unix 的环境变量设置方式):
1 | $ export RCLONE_CONFIG_MYS3_TYPE=s3 |
Note that if you want to create a remote using environment variables you must create the ..._TYPE 变量如上所示。
Note that the name of a remote created using environment variable is case insensitive, in contrast to regular remotes stored in config file as documented above. You must write the name in uppercase in the environment variable, but as seen from example above it will be listed and can be accessed in lowercase, while you can also refer to the same remote in uppercase:
1 | $ rclone lsd mys3: |
请注意,你只能设置即时后端的选项,因此如果 myS3Crypt 是基于 S3 的加密远程,RCLONE_CONFIG_MYS3CRYPT_ACCESS_KEY_ID 将不起作用。然而,RCLONE_S3_ACCESS_KEY_ID 将设置所有使用 S3 的远程的访问密钥,包括 myS3Crypt。
Note also that now rclone 有连接字符串,使用这些连接字符串可能更容易,这使得上述示例变得更为简单:
1 | rclone lsd :s3,access_key_id=XXX,secret_access_key=XXX: |
Precedence 优先级
后端配置的各种不同方法按此顺序读取,并使用第一个有值的配置。
- 连接字符串中的参数,例如
myRemote,skip_links: - 命令行提供的标志值,例如
--skip-links - 远程特定环境变量,例如
RCLONE_CONFIG_MYREMOTE_SKIP_LINKS(请参见上方). - 后端特定环境变量,例如
RCLONE_LOCAL_SKIP_LINKS. - 后端通用环境变量,例如
RCLONE_SKIP_LINKS. - 配置文件,例如
skip_links = true. - 默认值,例如
false- 这些不能被更改。
因此,如果在命令行中提供了 --skip-links 并且设置了环境变量 RCLONE_LOCAL_SKIP_LINKS ,则命令行标志将优先。
通过 -vv 标志可以查看由环境变量设置的后端配置,例如 rclone about myRemote: -vv 。
对于非后端配置,顺序如下:
- 命令行上提供的标志值,例如
--stats 5s。 - 环境变量,例如
RCLONE_STATS=5s. - 默认值,例如
1m- 这些不能被更改。
Other environment variables 其他环境变量
RCLONE_CONFIG_PASS设置为包含你的配置文件密码(参见配置加密部分)HTTP_PROXY,HTTPS_PROXY和NO_PROXY(或它们的小写版本)。HTTPS_PROXY优先于HTTP_PROXY对于 https 请求。- 环境值可以是一个完整的 URL 或者一个”host[:port]”,在这种情况下,假设使用”http”方案。
USER和LOGNAME值用作当前用户名的备用值。查找用户名的主要方法是操作系统特定的:在 Windows 上使用 Windows API,在 Unix 系统上使用 /etc/passwd 中的 real user ID。在文档中,当前用户名简单地称为$USER。RCLONE_CONFIG_DIR- rclone 为此变量设置值以在配置文件和子进程中使用,指向包含配置文件的目录。
通过 -vv 和 --log-level=DEBUG 标志可以查看由环境变量设置的选项,例如 rclone version -vv 。
设置
| 命令 | 说明 |
|---|---|
| rclone config | 添加、删除、管理网盘等操作 |
| rclone config file | 显示配置文件的路径 |
| rclone config show | 显示配置文件信息 |
1 | root@qiantigers:~# rclone config |
语法
1 | # 本地到网盘 |
示例
1 | # 复制到网盘,并显示实时传输进度,设置并行上传数为8 |
功能
| 命令 | 说明 |
|---|---|
| rclone copy | 复制 |
| rclone move | 移动,如果要在移动后删除空源目录,加上 –delete-empty-src-dirs 参数 |
| 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 | 测试运行,查看Rclon在实际运行中会进行哪些操作 |
| -P = –progress | 显示实时传输进度,500mS刷新一次,否则默认1分钟刷新一次 |
| –cache-chunk-size 5M | 块的大小,默认5M越大上传越快,占用内存越多,太大可能会导致进程中断 |
| –onedrive-chunk-size 100M | 提高OneDrive上传速度适用于G口宽带服务器(默认为320KB) |
| –drive-chunk-size 64M | 提高Google Drive上传速度适用于G口宽带服务器(默认为8M) |
| –cache-chunk-total-size SizeSuffix | 块可以在本地磁盘上占用的总大小,默认10G |
| –transfers=N | 并行文件数,默认为4 |
| –config string | 指定配置文件路径,string为配置文件路径 |
| –ignore-errors | 跳过错误 |
| –size-only | 根据文件大小校验,不校验hash |
| –drive-server-side-across-configs | 服务端对服务端传输 |
日志
有4个级别的日志记录:ERROR NOTICE INFO DEBUG
默认情况下Rclon将生成ERROR NOTICE日志
| 命令 | 说明 |
|---|---|
| -q | rclone将仅生成ERROR消息 |
| -v | rclone将生成ERROR NOTICE INFO 消息 |
| -vv | rclone 将生成ERROR NOTICE INFO DEBUG 消息 |
| –log-level LEVEL | 标志控制日志级别 |
输出日志到文件
使用--log-file=FILE选项rclone会将Error Info Debug消息以及标准错误重定向到FILE
这里的FILE是你指定的日志文件路径
过滤
| 命令 | 说明 |
|---|---|
| –exclude | 排除文件或目录 |
| –include | 包含文件或目录 |
| –filter | 文件过滤规则,相当于上面两个选项的其它使用方式。包含规则以+开头,排除规则以-开头 |
文件类型过滤
例如:--exclude "*.bak" --filter "- *.bak"排除所有bak文件
例如:--include "*.{png,jpg}" --filter "+ *.{png,jpg}"包含所有png和jpg文件,排除其他文件
例如:--delete-excluded删除排除的文件。需配合过滤参数使用,否则无效
目录过滤
目录过滤需要在目录名称后面加上/否则会被当做文件进行匹配
以/开头只会匹配根目录(指定目录下),否则匹配所目录,这同样适用于文件
--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的文件。
实际使用中发现大小过滤两个选项不能同时使用
过滤规则文件
--filter-from <规则文件>从文件添加包含/排除规则
比如
--filter-from filter-file.txt
过滤规则文件示例:
1 | - secret*.jpg |
环境变量
rclone中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除--前缀,更改-为_大写并添加前缀RCLONE_环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值。
比如设置最小上传大小--min-size 50使用环境变量是RCLONE_MIN_SIZE=50当环境变量设置后,在命令行中使用--min-size 100那么此时环境变量的值就会被覆盖
常用环境变量
| 命令 | 说明 |
|---|---|
| RCLONE_CONFIG | 自定义配置文件路径 |
| RCLONE_CONFIG_PASS | 若 rclone 进行了加密设置,把此环境变量设置为密码,可自动解密配置文件 |
| RCLONE_RETRIES | 上传失败重试次数,默认 3 次 |
| RCLONE_RETRIES_SLEEP | 上传失败重试等待时间,默认禁用,单位s、m、h分别代表秒、分钟、小时 |
| CLONE_TRANSFERS | 并行上传文件数 |
| RCLONE_CACHE_CHUNK_SIZE | 块的大小,默认5M |
| RCLONE_CACHE_CHUNK_TOTAL_SIZE | 块可以在本地磁盘上占用的总大小,默认10G |
| RCLONE_IGNORE_ERRORS=true | 跳过错误 |




