Local Filesystem
本地路径以常规文件系统路径的形式指定,例如 /path/to/wherever
,因此:
rclone sync --interactive /home/source /tmp/destination
将会把 /home/source
同步到 /tmp/destination
。
配置
为了保持一致性,你也可以在配置文件中配置一个类型为 local
的远程存储,然后使用 rclone 远程路径来访问本地文件系统,例如 remote:path/to/wherever
,但可能不这样做会更简单。
修改时间
Rclone 读取和写入修改时间的精度由操作系统决定。通常,Linux 系统的精度为 1 纳秒,Windows 系统为 10 纳秒,OS X 系统为 1 秒。
文件名
磁盘上的文件名应采用 UTF - 8 编码。Windows 和 OS X 系统通常就是这种情况。
在 Linux 系统中情况会稍微复杂一些,但新的发行版会使用 UTF - 8 编码的文件名。如果你使用的是一个旧的 Linux 文件系统,其文件名采用非 UTF - 8 编码(例如 latin1),那么你可以使用 convmv
工具将文件系统转换为 UTF - 8 编码。这个工具可以在大多数发行版的包管理器中找到。
如果读取到无效(非 UTF - 8)的文件名,无效字符将被替换为无效字节的引号表示形式。例如,gro\xdf
这个名称将被转换为 gro‛DF
。在这种情况下,rclone
会发出一条调试消息(使用 -v
选项可以查看),例如:
Local file system at .: Replacing invalid UTF-8 characters in "gro\xdf"
受限字符
使用本地后端时,文件或目录名中可用字符的限制取决于操作系统。要查看 rclone 在你的系统上默认会替换哪些字符,请运行 rclone help flags local-encoding
。
在非 Windows 平台上,处理文件名时会替换以下字符。
字符 | 编码值 | 替换字符 |
---|---|---|
NUL | 0x00 | ␀ |
/ | 0x2F | / |
在 Windows 系统上运行时,会替换以下字符。此列表基于 Windows 文件命名约定。
字符 | 编码值 | 替换字符 |
---|---|---|
NUL | 0x00 | ␀ |
SOH | 0x01 | ␁ |
STX | 0x02 | ␂ |
ETX | 0x03 | ␃ |
EOT | 0x04 | ␄ |
ENQ | 0x05 | ␅ |
ACK | 0x06 | ␆ |
BEL | 0x07 | ␇ |
BS | 0x08 | ␈ |
HT | 0x09 | ␉ |
LF | 0x0A | ␊ |
VT | 0x0B | ␋ |
FF | 0x0C | ␌ |
CR | 0x0D | ␍ |
SO | 0x0E | ␎ |
SI | 0x0F | ␏ |
DLE | 0x10 | ␐ |
DC1 | 0x11 | ␑ |
DC2 | 0x12 | ␒ |
DC3 | 0x13 | ␓ |
DC4 | 0x14 | ␔ |
NAK | 0x15 | ␕ |
SYN | 0x16 | ␖ |
ETB | 0x17 | ␗ |
CAN | 0x18 | ␘ |
EM | 0x19 | ␙ |
SUB | 0x1A | ␚ |
ESC | 0x1B | ␛ |
FS | 0x1C | ␜ |
GS | 0x1D | ␝ |
RS | 0x1E | ␞ |
US | 0x1F | ␟ |
/ | 0x2F | / |
" | 0x22 | " |
* | 0x2A | * |
: | 0x3A | : |
< | 0x3C | < |
> | 0x3E | > |
? | 0x3F | ? |
\ | 0x5C | \ |
| | 0x7C | | |
Windows 系统上的文件名也不能以以下字符结尾。只有当这些字符是文件名的最后一个字符时才会被替换:
字符 | 编码值 | 替换字符 |
---|---|---|
SP | 0x20 | ␠ |
. | 0x2E | . |
无效的 UTF-8 字节也会被 替换,因为它们无法转换为 UTF-16。
Windows 系统上的路径
在 Windows 系统上,有多种方式可以指定文件系统资源的路径。
本地路径可以是绝对路径,如 C:\path\to\wherever
,也可以是相对路径,如 ..\wherever
。UNC 格式的网络路径,如 \\server\share
,同样受支持。
路径分隔符可以是 \
(如 C:\path\to\wherever
),也可以是 /
(如 C:/path/to/wherever
)。
这些路径的长度限制为文件 259 个字符,目录 247 个字符,但有一种扩展长度路径格式可以将限制提高到(约)32,767 个字符。
这种格式要求使用绝对路径,并以 \\?\
为前缀,例如 \\?\D:\some\very\long\path
。为方便起见,rclone 会自动将常规路径转换为相应的扩展长度路径,
因此在大多数情况下你无需担心这个问题(更多信息请参阅 下面的内容)。
使用相同的前缀 \\?\
,还可以指定由 GUID 标识的卷的路径,例如 \\?\Volume{b75e2c83-0000-0000-0000-602f00000000}\some\path
。
长路径
rclone 会自动处理长路径,将所有路径转换为 扩展长度路径格式,该格式允许路径最长达 32,767 个字符。
这种转换会确保路径是绝对路径,并在前面加上 \\?\
。这就是为什么你会在输出中看到,例如 .\files
显示为 \\?\C:\files
,\\server\share
显示为 \\?\UNC\server\share
。
然而,在极少数情况下,这可能会与有问题的文件系统驱动程序(如 EncFS)产生冲突。
要全局禁用 UNC 转换,请将以下内容添加到你的 .rclone.conf
文件中:
[local]
nounc = true
If you want to selectively disable UNC, you can add it to a separate entry like this:
[nounc]
type = local
nounc = true
然后像这样使用 rclone:
rclone copy c:\src nounc:z:\dst
这将在 c:\src
上使用 UNC 路径,但在 z:\dst
上不使用。
当然,如果 z
盘上文件的绝对路径长度超过 259 个字符,这将会引发问题,因此仅在必要时使用此选项。
符号链接 / 连接点
通常情况下,rclone 会忽略符号链接或连接点(在 Windows 系统中,连接点的行为类似于符号链接)。
如果你提供 --copy-links
或 -L
参数,rclone 会跟随符号链接并复制其指向的文件或目录。请注意,此参数与 --links
/ -l
不兼容。
此参数适用于所有命令。
例如,假设你有如下的目录结构:
$ tree /tmp/a
/tmp/a
├── b -> ../b
├── expected -> ../expected
├── one
└── two
└── three
Then you can see the difference with and without the flag like this
$ rclone ls /tmp/a
6 one
6 two/three
and
$ rclone -L ls /tmp/a
4174 expected
6 one
6 two/three
6 b/two
6 b/one
–local-links、–links、-l
通常情况下,rclone 会忽略符号链接或连接点(在 Windows 系统中,连接点的行为类似于符号链接)。
如果你提供此标志,rclone 会从本地存储复制符号链接,并将它们作为文本文件存储在远程存储中,文件名后缀为 .rclonelink
。
文本文件将包含符号链接的目标(见示例)。
此标志适用于所有命令。
例如,假设你有如下的目录结构
$ tree /tmp/a
/tmp/a
├── file1 -> ./file4
└── file2 -> /home/user/file3
Copying the entire directory with ‘-l’
$ rclone copy -l /tmp/a/ remote:/tmp/a/
The remote files are created with a .rclonelink
suffix
$ rclone ls remote:/tmp/a
5 file1.rclonelink
14 file2.rclonelink
The remote files will contain the target of the symbolic links
$ rclone cat remote:/tmp/a/file1.rclonelink
./file4
$ rclone cat remote:/tmp/a/file2.rclonelink
/home/user/file3
Copying them back with ‘-l’
$ rclone copy -l remote:/tmp/a/ /tmp/b/
$ tree /tmp/b
/tmp/b
├── file1 -> ./file4
└── file2 -> /home/user/file3
However, if copied back without ‘-l’
$ rclone copyto remote:/tmp/a/ /tmp/b/
$ tree /tmp/b
/tmp/b
├── file1.rclonelink
└── file2.rclonelink
If you want to copy a single file with -l
then you must use the .rclonelink
suffix.
$ rclone copy -l remote:/tmp/a/file1.rclonelink /tmp/c
$ tree /tmp/c
/tmp/c
└── file1 -> ./file4
请注意,--local-links
仅针对本地后端启用此功能。--links
和 -l
则针对所有支持的后端和 VFS 启用此功能。
请注意,此标志与 -copy-links
/ -L
不兼容。
使用 --one-file-system
限制文件系统
通常情况下,rclone 会递归遍历已挂载的文件系统。
但是,如果你设置了 --one-file-system
或 -x
,这会告诉 rclone 停留在根目录指定的文件系统内,而不递归到不同的文件系统中。
例如,如果你有如下的目录结构
root
├── disk1 - disk1 mounted on the root
│ └── file3 - stored on disk1
├── disk2 - disk2 mounted on the root
│ └── file4 - stored on disk12
├── file1 - stored on the root disk
└── file2 - stored on the root disk
Using rclone --one-file-system copy root remote:
will only copy file1
and file2
. Eg
$ rclone -q --one-file-system ls root
0 file1
0 file2
$ rclone -q ls root
0 disk1/file3
0 disk2/file4
0 file1
0 file2
注意:Rclone(与大多数Unix工具如 du
、rsync
和 tar
一样)
将挂载到同一设备的绑定挂载视为在同一个文件系统上。
注意:此标志仅在基于Unix的系统上可用。在不支持的系统(如Windows)上,它将被忽略。
高级选项
以下是本地磁盘(Local Disk)特定的高级选项。
–local-nounc
在Windows上禁用UNC(长路径名)转换。
属性:
- 配置项:nounc
- 环境变量:RCLONE_LOCAL_NOUNC
- 类型:布尔值
- 默认值:false
- 示例:
- “true”
- 禁用长文件名。
- “true”
–copy-links / -L
跟随符号链接并复制其指向的项目。
属性:
- 配置项:copy_links
- 环境变量:RCLONE_LOCAL_COPY_LINKS
- 类型:布尔值
- 默认值:false
–local-links
为本地后端将符号链接与带有 .rclonelink
扩展名的常规文件进行相互转换。
属性:
- 配置项:links
- 环境变量:RCLONE_LOCAL_LINKS
- 类型:布尔值
- 默认值:false
–skip-links
不警告跳过的符号链接。
此标志禁用跳过符号链接或连接点时的警告消息,因为你明确承认它们应该被跳过。
属性:
- 配置项:skip_links
- 环境变量:RCLONE_LOCAL_SKIP_LINKS
- 类型:布尔值
- 默认值:false
–local-zero-size-links
假设符号链接的Stat大小为零(并读取它们)(已弃用)。
Rclone曾经使用符号链接的Stat大小作为链接大小,但这在很多地方会失败:
- Windows
- 某些虚拟文件系统(如LucidLink)
- Android
因此,Rclone现在总是读取链接。
属性:
- 配置项:zero_size_links
- 环境变量:RCLONE_LOCAL_ZERO_SIZE_LINKS
- 类型:布尔值
- 默认值:false
–local-unicode-normalization
对路径和文件名应用Unicode NFC规范化。
此标志可用于将从本地文件系统读取的文件名规范化为Unicode NFC形式。
Rclone通常不会修改从文件系统读取的文件名的编码。
在使用macOS时,这可能会很有用,因为它通常提供分解(NFD)的Unicode,在某些语言(如韩语)中,这种形式在某些操作系统上显示不正常。
请注意,Rclone在同步例程中会使用Unicode规范化来比较文件名,因此通常不应使用此标志。
属性:
- 配置项:unicode_normalization
- 环境变量:RCLONE_LOCAL_UNICODE_NORMALIZATION
- 类型:布尔值
- 默认值:false
–local-no-check-updated
上传期间不检查文件是否更改。
通常,Rclone在上传文件时会检查文件的大小和修改时间,如果文件在上传过程中发生更改,它会以 “无法复制 - 源文件正在更新” 开头的消息中止。
但是,在某些文件系统上,此修改时间检查可能会失败(例如,Glusterfs #2206),因此可以使用此标志禁用此检查。
如果设置了此标志,Rclone将尽力传输正在更新的文件。如果文件只是在追加内容(例如日志),则Rclone将传输它第一次看到时的日志文件大小。
如果文件在整个过程中都在被修改(而不仅仅是追加),则传输可能会因哈希检查失败而失败。
详细来说,一旦文件第一次调用了 stat()
,我们将:
- 仅传输
stat
给出的大小 - 仅对
stat
给出的大小进行校验和 - 不更新文件的
stat
信息
注意:请勿在Windows卷影副本(VSS)上使用此标志。出于某些未知原因,VSS中的文件有时显示的大小与目录列表(Windows上初始 stat
值的来源)不同,而直接对它们调用 stat
时则不同。其他复制工具总是使用直接的 stat
值,设置此标志将禁用该功能。
属性:
- 配置项:no_check_updated
- 环境变量:RCLONE_LOCAL_NO_CHECK_UPDATED
- 类型:布尔值
- 默认值:false
–one-file-system / -x
不跨越文件系统边界(仅适用于Unix/macOS)。
属性:
- 配置项:one_file_system
- 环境变量:RCLONE_LOCAL_ONE_FILE_SYSTEM
- 类型:布尔值
- 默认值:false
–local-case-sensitive
强制文件系统报告自己为区分大小写。
通常,本地后端在Windows/macOS上声明自己为不区分大小写,而在其他系统上声明为区分大小写。使用此标志可以覆盖默认选择。
属性:
- 配置项:case_sensitive
- 环境变量:RCLONE_LOCAL_CASE_SENSITIVE
- 类型:布尔值
- 默认值:false
–local-case-insensitive
强制文件系统报告自己为不区分大小写。
通常,本地后端在Windows/macOS上声明自己为不区分大小写,而在其他系统上声明为区分大小写。使用此标志可以覆盖默认选择。
属性:
- 配置项:case_insensitive
- 环境变量:RCLONE_LOCAL_CASE_INSENSITIVE
- 类型:布尔值
- 默认值:false
–local-no-clone
禁用服务器端复制的重定向链接克隆。
通常,对于本地到本地的传输,Rclone会在可能的情况下 “克隆” 文件,只有在不支持克隆时才会回退到 “复制”。
克隆会创建一个浅拷贝(或 “重定向链接”),该拷贝最初与原始文件共享块。与 “硬链接” 不同,这两个文件是独立的,后续修改时不会相互影响。
克隆通常比复制更可取,因为它更快,并且默认情况下是去重的(即,拥有两个相同的文件不会比只拥有一个文件消耗更多的存储空间)。但是,对于更倾向于数据冗余的用例,可以使用 --local-no-clone
禁用克隆并强制进行 “深度” 复制。
目前,克隆仅在macOS上使用APFS时受支持(未来可能会添加对其他平台的支持)。
属性:
- 配置项:no_clone
- 环境变量:RCLONE_LOCAL_NO_CLONE
- 类型:布尔值
- 默认值:false
–local-no-preallocate
禁用传输文件的磁盘空间预分配。
磁盘空间预分配有助于防止文件系统碎片化。 但是,某些虚拟文件系统层(如Google Drive File Stream)可能会错误地将实际文件大小设置为预分配的空间,导致校验和和文件大小检查失败。 使用此标志禁用预分配。
属性:
- 配置项:no_preallocate
- 环境变量:RCLONE_LOCAL_NO_PREALLOCATE
- 类型:布尔值
- 默认值:false
–local-no-sparse
禁用多线程下载的稀疏文件。
在Windows平台上,Rclone在进行多线程下载时会创建稀疏文件。这避免了在大文件上因操作系统将文件清零而导致的长时间暂停。但是,稀疏文件可能不受欢迎,因为它们会导致磁盘碎片化,并且处理起来可能很慢。
属性:
- 配置项:no_sparse
- 环境变量:RCLONE_LOCAL_NO_SPARSE
- 类型:布尔值
- 默认值:false
–local-no-set-modtime
禁用设置修改时间。
通常,Rclone在文件上传完成后会更新文件的修改时间。这可能会在Linux平台上导致权限问题,例如当Rclone运行的用户不拥有上传的文件时,如复制到另一个用户拥有的CIFS挂载时。如果启用此选项,Rclone在复制文件后将不再更新修改时间。
属性:
- 配置项:no_set_modtime
- 环境变量:RCLONE_LOCAL_NO_SET_MODTIME
- 类型:布尔值
- 默认值:false
–local-time-type
设置返回的时间类型。
通常,Rclone对修改时间(mtime)进行所有操作。
如果设置了此标志,Rclone将返回你在此处设置的修改时间。因此,如果你使用 “rclone lsl –local-time-type ctime”,则在列表中会看到创建时间(ctime)。
如果操作系统不支持返回指定的时间类型,Rclone将默默地将其替换为所有操作系统都支持的修改时间。
- mtime 所有操作系统都支持
- atime 除了 plan9、js 之外的所有操作系统都支持
- btime 仅在 Windows、macOS、freebsd、netbsd 上支持
- ctime 除了 Windows、plan9、js 之外的所有操作系统都支持
请注意,设置时间仍将设置修改时间,因此这仅适用于读取。
属性:
- 配置项:time_type
- 环境变量:RCLONE_LOCAL_TIME_TYPE
- 类型:mtime|atime|btime|ctime
- 默认值:mtime
- 示例:
- “mtime”
- 最后修改时间。
- “atime”
- 最后访问时间。
- “btime”
- 创建时间。
- “ctime”
- 最后状态更改时间。
- “mtime”
–local-encoding
后端的编码方式。
有关更多信息,请参阅 概述中的编码部分。
属性:
- 配置项:encoding
- 环境变量:RCLONE_LOCAL_ENCODING
- 类型:Encoding
- 默认值:Slash,Dot
–local-description
远程存储的描述。
属性:
- 配置项:description
- 环境变量:RCLONE_LOCAL_DESCRIPTION
- 类型:字符串
- 是否必需:否
元数据
根据所使用的操作系统,本地后端可能只返回部分系统元数据。所有操作系统都支持设置系统元数据,但仅在Linux、FreeBSD、NetBSD、macOS和Solaris上支持设置用户元数据。目前在Windows上不支持(请参阅pkg/attrs#47)。
用户元数据以扩展属性的形式存储(并非所有文件系统都支持),前缀为 “user.*”。
文件和目录都支持元数据。
以下是本地后端可能的系统元数据项。
名称 | 说明 | 类型 | 示例 | 是否只读 |
---|---|---|---|---|
atime | 最后访问时间 | RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 | 否 |
btime | 文件创建时间 | RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 | 否 |
gid | 所有者的组ID | 十进制数字 | 500 | 否 |
mode | 文件类型和权限 | 八进制,Unix风格 | 0100664 | 否 |
mtime | 最后修改时间 | RFC 3339 | 2006-01-02T15:04:05.999999999Z07:00 | 否 |
rdev | 设备ID(如果是特殊文件) | 十六进制 | 1abc | 否 |
uid | 所有者的用户ID | 十进制数字 | 500 | 否 |
有关更多信息,请参阅 元数据 文档。
后端命令
以下是本地后端特定的命令。
使用以下命令运行它们:
rclone backend COMMAND remote:
下面的帮助信息将解释每个命令接受哪些参数。
有关如何传递选项和参数的更多信息,请参阅 backend 命令。
这些命令可以使用rc命令 backend/command 在运行的后端上执行。
noop
用于测试后端命令的空操作
rclone backend noop remote: [选项] [<参数>+]
这是一个测试命令,有一些选项 你可以尝试更改输出。
选项:
- “echo”: 回显输入参数
- “error”: 根据选项值返回错误