Rclone 过滤功能
过滤标志决定了 rclone 的 sync
、move
、ls
、lsl
、md5sum
、sha1sum
、size
、delete
、check
等命令会应用到哪些文件上。
这些标志可以通过路径/文件名模式、路径/文件列表、文件年龄和大小,或者目录中是否存在某个文件来指定。对于没有目录概念的基于桶的远程存储,会以类似的方式对对象键、年龄和大小应用过滤规则。
Rclone 的 purge
命令不遵循过滤规则。
为了在不损坏数据的情况下测试过滤规则,可以将其应用于 rclone ls
命令,或者结合 --dry-run
和 -vv
标志使用。
Rclone 的过滤模式只能在过滤命令行选项中使用,不能用于指定远程存储。
例如,rclone copy "remote:dir*.jpg" /path/to/dir
不会产生过滤效果,而 rclone copy remote:dir /path/to/dir --include "*.jpg"
则会。
重要提示:避免在 rclone 命令中同时使用 --include...
、--exclude...
或 --filter...
标志中的任意两个。结果可能与预期不符。建议使用 --filter...
标志。
匹配路径/文件名的模式
模式语法
以下是模式语法的正式定义,示例 见下文。
Rclone 的匹配规则遵循 glob 风格:
* 匹配任意非分隔符(/)字符序列
** 匹配任意字符序列,包括 / 分隔符
? 匹配任意单个非分隔符(/)字符
[ [ ! ] { character-range } ]
字符类(必须非空)
{ pattern-list }
模式备选项
{{ regexp }}
要匹配的正则表达式
c 匹配字符 c(c 不等于 *, **, ?, \, [, {, })
\c 匹配保留字符 c(c 等于 *, **, ?, \, [, {, }) 或字符类
字符范围:
c 匹配字符 c(c 不等于 \, -, ])
\c 匹配保留字符 c(c 等于 \, -, ])
lo - hi 匹配满足 lo <= c <= hi 的字符 c
模式列表:
pattern { , pattern }
逗号分隔(无空格)的模式
字符类(参见 Go 正则表达式参考)包括:
命名字符类(例如 [\d], [^\d], [\D], [^\D])
Perl 字符类(例如 \s, \S, \w, \W)
ASCII 字符类(例如 [[:alnum:]], [[:alpha:]], [[:punct:]], [[:xdigit:]])
正则表达式供高级用户插入正则表达式 - 更多信息见 下文:
任何不包含 `}}` 的 re2 正则表达式
如果过滤模式以 /
开头,则仅在目录树的顶级匹配,相对于远程存储的根目录(不一定是驱动器的根目录)。如果不以 /
开头,则从路径/文件名的末尾开始匹配,但必须匹配完整的路径元素 - 必须从 /
分隔符或路径/文件的开头开始匹配。
file.jpg - 匹配 "file.jpg"
- 匹配 "directory/file.jpg"
- 不匹配 "afile.jpg"
- 不匹配 "directory/afile.jpg"
/file.jpg - 匹配远程存储根目录下的 "file.jpg"
- 不匹配 "afile.jpg"
- 不匹配 "directory/file.jpg"
远程存储的顶级目录可能不是驱动器的顶级目录。
例如,对于 Microsoft Windows 本地目录结构:
F:
├── bkp
├── data
│ ├── excl
│ │ ├── 123.jpg
│ │ └── 456.jpg
│ ├── incl
│ │ └── document.pdf
要将 data
文件夹的内容复制到 bkp
文件夹,并排除 excl
子文件夹的内容,以下命令将 F:\data
和 F:\bkp
视为过滤的顶级目录。
rclone copy F:\data\ F:\bkp\ --exclude=/excl/**
重要提示:即使在 Microsoft Windows 系统上运行,也应在路径/文件名模式中使用 /
而不是 \
。
除非使用 --ignore-case
标志,否则简单模式区分大小写。
不使用 --ignore-case
(默认情况):
potato - 匹配 "potato"
- 不匹配 "POTATO"
使用 --ignore-case
:
potato - 匹配 "potato"
- 匹配 "POTATO"
在过滤模式中使用正则表达式
过滤模式的语法采用 glob 风格匹配(类似于 bash
),方便用户使用。但这并不能提供对匹配的绝对控制,因此对于高级用户,rclone 还提供了正则表达式语法。
使用的正则表达式遵循 Go 正则表达式参考 中定义的规则。正则表达式应包含在 {{
和 }}
中。如果 glob 模式不以 /
开头,则正则表达式仅匹配最后一个路径段;如果以 /
开头,则匹配整个路径名。请注意,rclone 不会尝试解析提供的正则表达式,这意味着使用任何正则表达式过滤将阻止 rclone 使用 目录过滤规则,因为它将对每个路径与提供的正则表达式进行检查。
以下是 {{regexp}}
如何转换为匹配整个路径的完整正则表达式:
{{regexp}} 转换为 (^|/)(regexp)$
/{{regexp}} 转换为 ^(regexp)$
正则表达式语法可以与 glob 语法混合使用,例如:
*.{{jpe?g}} 匹配 file.jpg、file.jpeg,但不匹配 file.png
你还可以使用正则表达式标志 - 例如设置不区分大小写:
*.{{(?i)jpg}} 匹配 file.jpg、file.JPG,但不匹配 file.png
在正则表达式中使用通配符时要小心 - 通常不希望它们匹配路径分隔符。要匹配以 start
开头并以 end
结尾的任何文件名,应写成:
{{start[^/]*end\.jpg}}
而不是:
{{start.*end\.jpg}}
因为后者会匹配名为 start
的目录中包含名为 end.jpg
的文件,因为 .*
会匹配 /
字符。
注意,你可以使用 -vv --dump filters
以正则表达式格式显示过滤模式 - rclone 通过将 glob 模式转换为正则表达式来实现这些模式。
过滤模式示例
描述 | 模式 | 匹配项 | 不匹配项 |
---|---|---|---|
通配符 | *.jpg |
/file.jpg |
/file.png |
/dir/file.jpg |
/dir/file.png |
||
根目录匹配 | /*.jpg |
/file.jpg |
/file.png |
/file2.jpg |
/dir/file.jpg |
||
备选项 | *.{jpg,png} |
/file.jpg |
/file.gif |
/dir/file.png |
/dir/file.gif |
||
路径通配符 | dir/** |
/dir/anyfile |
file.png |
/subdir/dir/subsubdir/anyfile |
/subdir/file.png |
||
任意字符 | *.t?t |
/file.txt |
/file.qxt |
/dir/file.tzt |
/dir/file.png |
||
范围 | *.[a-z] |
/file.a |
/file.0 |
/dir/file.b |
/dir/file.1 |
||
转义 | *.\?\?\? |
/file.??? |
/file.abc |
/dir/file.??? |
/dir/file.def |
||
字符类 | *.\d\d\d |
/file.012 |
/file.abc |
/dir/file.345 |
/dir/file.def |
||
正则表达式 | *.{{jpe?g}} |
/file.jpeg |
/file.png |
/dir/file.jpg |
/dir/file.jpeeg |
||
根目录正则表达式 | /{{.*\.jpe?g}} |
/file.jpeg |
/file.png |
/file.jpg |
/dir/file.jpg |
过滤规则如何应用于文件
Rclone 的路径/文件名过滤器由以下一个或多个标志组成:
--include
--include-from
--exclude
--exclude-from
--filter
--filter-from
单个标志可以多次使用。
Rclone 内部使用所有包含和排除规则的组合列表。规则的处理顺序会影响过滤结果。
所有相同类型的标志会按照上述顺序一起处理,无论不同类型的标志在命令行中出现的顺序如何。
同一标志的多个实例会根据其在命令行中的位置从左到右处理。
要混合处理包含和排除规则的顺序,可以使用 --filter...
标志。
在 --include-from
、--exclude-from
和 --filter-from
标志中,规则会从引用文件的顶部到底部处理。
如果指定了 --include
或 --include-from
标志,rclone 会隐含一个 - **
规则,并将其添加到内部规则列表的底部。使用 --filter...
标志指定 +
规则不会隐含该规则。
每个通过 rclone 的路径/文件名都会与组合过滤列表进行匹配。一旦匹配到某个规则,该路径/文件名就会被包含或排除,并且不会再处理该路径/文件的其他过滤规则。
如果 rclone 在测试所有规则(包括必要时的隐含规则)后仍未找到匹配项,则该路径/文件名会被包含。
此时包含的任何路径/文件都会由 rclone 命令处理。
--files-from
和 --files-from-raw
标志会覆盖其他过滤选项,并且不能与其他过滤选项组合使用。
要查看命令的内部组合规则列表(以正则表达式形式),可以添加 --dump filters
标志。使用 --dump filters
和 -vv
标志运行 rclone 命令会列出内部过滤元素,并显示它们如何应用于每个源路径/文件。目前没有提供直接将正则表达式过滤选项传递给 rclone 的方法,尽管字符类过滤规则包含字符类。Go 正则表达式参考
过滤规则如何应用于目录
Rclone 命令应用于路径/文件名,而不是目录。可以使用模式 directory/*
递归地匹配目录的整个内容,或者使用 directory/**
。
目录过滤规则以 /
分隔符结尾。
例如,/directory/subdirectory/
是一个 rclone 目录过滤规则。
Rclone 命令可以使用目录过滤规则来确定是否递归到子目录中。这可以通过避免列出不必要的目录来优化对远程存储的访问。是否需要优化取决于具体的过滤规则和源远程存储的内容。
如果使用了任何 正则表达式过滤器,则无法进行目录递归优化,因为 rclone 必须检查每个路径与提供的正则表达式。
在以下情况下会进行目录递归优化:
-
源远程存储不支持 rclone 的
ListR
原语。本地存储、sftp、Microsoft OneDrive 和 WebDAV 不支持ListR
。Google Drive 和大多数基于桶的存储支持。完整列表 -
在其他支持
ListR
的远程存储上,如果 rclone 命令不是自然递归的,并且没有使用--fast-list
标志。ls
、lsf -R
和size
是自然递归的,但sync
、copy
和move
不是。 -
当对 rclone 命令应用
--disable ListR
标志时。
Rclone 命令会从路径/文件过滤规则中隐含目录过滤规则。要查看 rclone 为命令隐含的目录过滤规则,可以指定 --dump filters
标志。
例如,对于包含规则:
/a/*.jpg
Rclone 会隐含目录包含规则:
/a/
在 rclone 命令中指定的目录过滤规则可以限制 rclone 命令的范围,但仍需要指定路径/文件过滤器。
例如,rclone ls remote: --include /directory/
不会匹配任何文件。因为这是一个 --include
选项,会隐含 --exclude **
规则,而 /directory/
模式仅用于通过忽略该目录之外的所有内容来优化对远程存储的访问。
例如,rclone ls remote: --filter-from filter-list.txt
,其中 filter-list.txt
文件内容如下:
- /dir1/
- /dir2/
+ *.pdf
- **
目录 dir1
或 dir2
及其子目录中的所有文件将完全从列表中排除。仅列出 remote:
根目录或其子目录中后缀为 pdf
的文件。- **
规则会阻止列出之前规则未匹配的任何路径/文件。
选项 exclude-if-present
会根据目录中是否存在某个文件创建一个目录排除规则,并且优先于其他 rclone 目录过滤规则。
当使用模式列表语法时,如果模式项包含 /
或 **
,则 rclone 无法从该模式列表中隐含目录过滤规则。
例如,对于包含规则:
{dir1/**,dir2/**}
Rclone 只会匹配 dir1
或 dir2
目录下的文件,但无法使用此过滤器排除 dir3
目录的遍历。
目录递归优化可能会影响性能,但通常不会影响结果。一个例外是使用 --create-empty-src-dirs
选项的同步操作,其中遍历的任何空目录都会被创建。对于上述模式列表示例 {dir1/**,dir2/**}
,这会在目标端创建一个空目录 dir3
(如果源端存在)。将过滤器更改为 {dir1,dir2}/**
,或拆分为两个包含规则 --include dir1/** --include dir2/**
,将匹配相同的文件,同时过滤目录,结果是不会再创建空目录 dir3
。
--exclude
- 排除匹配模式的文件
根据单个排除规则,从 rclone 命令中排除路径/文件名。
此标志可以重复使用。有关过滤标志的处理顺序,请参阅上文。
--exclude
不应与 --include
、--include-from
、--filter
或 --filter-from
标志一起使用。
--exclude
与 --files-from
或 --files-from-raw
标志结合使用时无效。
例如,rclone ls remote: --exclude *.bak
会从列表中排除所有 .bak
文件。
例如,rclone size remote: --exclude "/dir/**"
会返回 remote:
上所有文件的总大小,排除根目录 dir
及其子目录中的文件。
例如,在 Microsoft Windows 上,rclone ls remote: --exclude "*\[{JP,KR,HK}\]*"
会列出 remote:
中名称中不包含 [JP]
、[KR]
或 [HK]
的文件。引号可防止 shell 解释 \
字符。\
字符用于转义 [
和 ]
,以便 rclone 过滤器将它们视为字面字符,而不是字符范围。{
和 }
定义了一个 rclone 模式列表。对于其他操作系统,需要使用单引号,即 rclone ls remote: --exclude '*\[{JP,KR,HK}\]*'
--exclude-from
- 从文件中读取排除模式
根据指定文件中的规则,从 rclone 命令中排除路径/文件名。该文件包含注释和模式规则列表。
例如,exclude-file.txt
文件内容如下:
# 一个示例排除规则文件
*.bak
file2.jpg
rclone ls remote: --exclude-from exclude-file.txt
会列出 remote:
上的文件,但排除名为 file2.jpg
或后缀为 .bak
的文件。这相当于 rclone ls remote: --exclude file2.jpg --exclude "*.bak"
。
此标志可以重复使用。有关过滤标志的处理顺序,请参阅上文。
--exclude-from
标志在将多个排除过滤规则应用于 rclone 命令时非常有用。
--exclude-from
不应与 --include
、--include-from
、--filter
或 --filter-from
标志一起使用。
--exclude-from
与 --files-from
或 --files-from-raw
标志结合使用时无效。
--exclude-from
后跟 -
会从标准输入读取过滤规则。
--include
- 包含匹配模式的文件
根据路径/文件名添加单个包含规则到 rclone 命令中。
此标志可以重复使用。有关过滤标志的处理顺序,请参阅上文。
--include
与 --files-from
或 --files-from-raw
标志结合使用时无效。
--include
会在 rclone 内部过滤列表的末尾隐含 --exclude **
。因此,如果将 --include
和 --include-from
标志与 --exclude
、--exclude-from
、--filter
或 --filter-from
混合使用,则必须在包含语句中为所有需要包含的文件使用包含规则。为了获得更大的灵活性,可以使用 --filter-from
标志。
例如,rclone ls remote: --include "*.{png,jpg}"
会列出 remote:
上后缀为 .png
和 .jpg
的文件。其他所有文件都会被排除。
例如,多个 rclone 复制命令可以通过 --include
和模式列表进行组合。
rclone copy /vol1/A remote:A
rclone copy /vol1/B remote:B
等同于:
rclone copy /vol1 remote: --include "{A,B}/**"
例如,rclone ls remote:/wheat --include "??[^[:punct:]]*"
会列出 remote:
目录 wheat
(及其子目录)中第三个字符不是标点符号的文件。此示例使用了 ASCII 字符类。
--include-from
- 从文件中读取包含模式
根据指定文件中的规则,将路径/文件名添加到 rclone 命令中。该文件包含注释和模式规则列表。
例如,include-file.txt
文件内容如下:
# 一个示例包含规则文件
*.jpg
file2.avi
rclone ls remote: --include-from include-file.txt
会列出 remote:
上名称为 file2.avi
或后缀为 .jpg
的文件。这相当于 rclone ls remote: --include file2.avi --include "*.jpg"
。
此标志可以重复使用。有关过滤标志的处理顺序,请参阅上文。
--include-from
标志在将多个包含过滤规则应用于 rclone 命令时非常有用。
--include-from
会在 rclone 内部过滤列表的末尾隐含 --exclude **
。因此,如果将 --include
和 --include-from
标志与 --exclude
、--exclude-from
、--filter
或 --filter-from
混合使用,则必须在包含语句中为所有需要包含的文件使用包含规则。为了获得更大的灵活性,可以使用 --filter-from
标志。
--include-from
与 --files-from
或 --files-from-raw
标志结合使用时无效。
--include-from
后跟 -
会从标准输入读取过滤规则。
--filter
- 添加文件过滤规则
根据单个包含或排除规则,以 +
或 -
格式指定路径/文件名到 rclone 命令中。
此标志可以重复使用。有关过滤标志的处理顺序,请参阅上文。
--filter +
与 --include
不同。在 --include
的情况下,rclone 会隐含一个 --exclude *
规则,并将其添加到内部规则列表的底部。--filter...+
不会隐含该规则。
--filter
与 --files-from
或 --files-from-raw
标志结合使用时无效。
--filter
不应与 --include
、--include-from
、--exclude
或 --exclude-from
标志一起使用。
例如,rclone ls remote: --filter "- *.bak"
会从 remote:
的列表中排除所有 .bak
文件。
--filter-from
- 从文件中读取过滤模式
根据指定文件中的规则,将路径/文件名添加到 rclone 命令中。该文件包含注释和模式规则列表。包含规则以 +
开头,排除规则以 -
开头。!
会清除现有规则。规则会按照定义的顺序处理。
此标志可以重复使用。有关过滤标志的处理顺序,请参阅上文。
过滤规则的顺序应从最严格的规则开始,逐步放宽。
以 #
或 ;
开头的行将被忽略,可用于编写注释。不支持行内注释。使用 -vv --dump filters
查看它们在最终正则表达式中的显示方式。
例如,filter-file.txt
文件内容如下:
# 一个示例过滤规则文件
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- /dir/tmp/** # 警告!此文本将被视为路径的一部分。
- /dir/Trash/**
+ /dir/**
# 排除其他所有内容
- *
rclone ls remote: --filter-from filter-file.txt
会列出 remote:
上的路径/文件,包括所有 jpg
和 png
文件,排除任何匹配 secret*.jpg
的文件,并包括 file2.avi
。它还会包括 remote:
根目录下 dir
目录中的所有内容,但排除 remote:dir/Trash
。其他所有内容都会被排除。
例如,另一个 filter-file.txt
文件内容如下:
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- *
文件 file1.jpg
、file3.png
和 file2.avi
会被列出,而 secret17.jpg
和后缀不是 .jpg
或 .png
的文件会被排除。
例如,再一个 filter-file.txt
文件内容如下:
+ *.jpg
+ *.gif
!
+ 42.doc
- *
仅列出文件 42.doc
。先前的规则会被 !
清除。
--files-from
- 读取源文件名列表
从指定文件中的列表中添加路径/文件到 rclone 命令中。Rclone 会按照列表的顺序处理路径/文件名,不会处理其他文件。
使用 --files-from
时,其他过滤标志(--include
、--include-from
、--exclude
、--exclude-from
、--filter
和 --filter-from
)将被忽略。
--files-from
期望输入一个文件列表。输入行的前导或尾随空格会被去除。以 #
或 ;
开头的行将被忽略。
--files-from
后跟 -
会从标准输入读取文件列表。
带有 --files-from
标志的 rclone 命令会遍历远程存储,将 --files-from
中的名称视为一组过滤器。
如果同时使用 --no-traverse
和 --files-from
标志,rclone 命令不会遍历远程存储。相反,它会单独处理文件中指定的每个路径/文件。对于每个路径/文件名,通常需要 1 次 API 调用。对于较短的 --files-from
列表和包含许多文件的远程存储,这可能很高效。
如果 --files-from
文件中的任何名称在源远程存储中缺失,rclone 命令不会报错。
--files-from
标志可以在单个 rclone 命令中重复使用,以从多个文件中读取路径/文件名。文件会按照命令行从左到右的顺序读取。
--files-from
文件中的路径将被解释为从 rclone 命令中指定的根目录开始。前导 /
分隔符将被忽略。如果需要以原始方式处理输入,请参阅 –files-from-raw。
例如,files-from.txt
文件内容如下:
# 注释
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
例如,要复制以下通过绝对路径引用的文件:
/home/user1/42
/home/user1/dir/ford
/home/user2/prefect
首先找到一个公共子目录 - 在这种情况下是 /home
,并将剩余的文件放入 files-from.txt
中,可以带有或不带有前导 /
,例如:
user1/42
user1/dir/ford
user2/prefect
然后将这些文件复制到远程存储:
rclone copy --files-from files-from.txt /home remote:backup
这三个文件将按以下方式传输:
/home/user1/42 → remote:backup/user1/important
/home/user1/dir/ford → remote:backup/user1/dir/file
/home/user2/prefect → remote:backup/user2/stuff
或者,如果选择 /
作为根目录,files-from.txt
内容如下:
/home/user1/42
/home/user1/dir/ford
/home/user2/prefect
复制命令如下:
rclone copy --files-from files-from.txt / remote:backup
然后远程存储上会有一个额外的 home
目录:
/home/user1/42 → remote:backup/home/user1/42
/home/user1/dir/ford → remote:backup/home/user1/dir/ford
/home/user2/prefect → remote:backup/home/user2/prefect
--files-from-raw
- 无处理地读取源文件名列表
此标志与 --files-from
相同,只是输入以原始方式读取。带有前导/尾随空格的行以及以 ;
或 #
开头的行将无处理地读取。rclone lsf 具有兼容的格式,可用于从远程存储导出文件列表,以供 --files-from-raw
输入。
--ignore-case
- 使搜索不区分大小写
默认情况下,rclone 过滤模式区分大小写。--ignore-case
标志会使命令行上的所有过滤模式不区分大小写。
例如,--include "zaphod.txt"
不会匹配文件 Zaphod.txt
。使用 --ignore-case
则会匹配。
转义 shell 元字符
包含 shell 元字符的过滤模式的 rclone 命令在 shell 中可能无法按预期工作,可能需要进行转义。
例如,在 Linux、OSX 系统中(*
元字符):
--include \*.jpg
--include '*.jpg'
--include='*.jpg'
Microsoft Windows 系统的扩展由命令而不是 shell 完成,因此 --include *.jpg
不需要转义。
如果遇到 rclone 错误:
Command .... needs .... arguments maximum: you provided .... non flag arguments:
常见原因是远程存储名称或标志值中包含空格。解决方法是对包含空格的值进行转义。
其他过滤器
--min-size
- 不传输小于此大小的文件
控制 rclone 命令范围内文件的最小大小。默认单位是 KiB
,但缩写 B
、K
、M
、G
、T
或 P
也有效。
例如,rclone ls remote: --min-size 50k
会列出 remote:
上大小为 50 KiB 或更大的文件。
更多信息请参阅 大小选项文档。
--max-size
- 不传输大于此大小的文件
控制 rclone 命令范围内文件的最大大小。默认单位是 KiB
,但缩写 B
、K
、M
、G
、T
或 P
也有效。
例如,rclone ls remote: --max-size 1G
会列出 remote:
上大小为 1 GiB 或更小的文件。
更多信息请参阅 大小选项文档。
--max-age
- 不传输早于此时间的文件
控制 rclone 命令范围内文件的最大年龄。
--max-age
仅适用于文件,不适用于目录。
例如,rclone ls remote: --max-age 2d
会列出 remote:
上 2 天或更年轻的文件。
有效格式请参阅 时间选项文档。
--min-age
- 不传输晚于此时间的文件
控制 rclone 命令范围内文件的最小年龄。(有效格式请参阅 --max-age
)
--min-age
仅适用于文件,不适用于目录。
例如,rclone ls remote: --min-age 2d
会列出 remote:
上 2 天或更老的文件。
有效格式请参阅 时间选项文档。
其他标志
--delete-excluded
- 删除同步中排除的目标文件
重要提示:此标志可能会对你的数据造成危险 - 请先使用 --dry-run
和 -v
进行测试。
与 rclone sync
结合使用时,--delete-excluded
会删除目标端上被排除在命令之外的任何文件。
例如,可以限制 rclone sync --interactive A: B:
的范围:
rclone --min-size 50k --delete-excluded sync A: B:
B:
上所有小于 50 KiB 的文件将被删除,因为它们被排除在 rclone 同步命令之外。
--dump filters
- 将过滤器输出到标准输出
以正则表达式格式将定义的过滤器输出到标准输出。
用于调试。
根据文件排除目录
--exclude-if-present
标志根据目录中是否存在指定文件来控制该目录是否在 rclone 命令的范围内。该标志可以重复使用,以检查多个文件名,任何一个文件的存在都会排除该目录。
此标志优先于其他过滤标志。
例如,对于以下目录结构:
dir1/file1
dir1/dir2/file2
dir1/dir2/dir3/file3
dir1/dir2/dir3/.ignore
命令 rclone ls --exclude-if-present .ignore dir1
不会列出 dir3
、file3
或 .ignore
。
元数据过滤器
元数据过滤器的工作方式与普通文件名过滤器非常相似,只是它们匹配对象的 元数据。
元数据应指定为 key=value
模式。可以使用普通的 过滤模式 或 正则表达式 进行通配。
例如,如果你只想列出本地模式为 100664
的文件,可以使用以下命令:
rclone lsf -M --files-only --metadata-include "mode=100664" .
或者,如果你想显示 atime
、mtime
或 btime
在给定日期的文件:
rclone lsf -M --files-only --metadata-include "[abm]time=2022-12-16*" .
与文件过滤一样,元数据过滤仅适用于文件,不适用于目录。
可以使用以下标志应用过滤器:
--metadata-include
- 包含匹配模式的元数据--metadata-include-from
- 从文件中读取元数据包含模式(使用-
从标准输入读取)--metadata-exclude
- 排除匹配模式的元数据--metadata-exclude-from
- 从文件中读取元数据排除模式(使用-
从标准输入读取)--metadata-filter
- 添加元数据过滤规则--metadata-filter-from
- 从文件中读取元数据过滤模式(使用-
从标准输入读取)
每个标志都可以重复使用。有关详细信息,请参阅 过滤规则如何应用 部分 - 这些标志的工作方式与文件名过滤标志相同,但使用元数据模式而不是文件名模式。
常见陷阱
在 rclone 论坛 上,最常见的过滤支持问题包括:
- 未使用相对于远程存储根目录的路径
- 未使用
/
从远程存储的根目录开始匹配 - 未使用
**
匹配目录的内容