Local Filesystem

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工具如 dursynctar 一样) 将挂载到同一设备的绑定挂载视为在同一个文件系统上。

注意:此标志仅在基于Unix的系统上可用。在不支持的系统(如Windows)上,它将被忽略。

高级选项

以下是本地磁盘(Local Disk)特定的高级选项。

–local-nounc

在Windows上禁用UNC(长路径名)转换。

属性:

  • 配置项:nounc
  • 环境变量:RCLONE_LOCAL_NOUNC
  • 类型:布尔值
  • 默认值:false
  • 示例:
    • “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”
      • 最后状态更改时间。

–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”: 根据选项值返回错误