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

注意:此标志仅在基于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”: 根据选项值返回错误