1. 首页
  2. 帮助中心
  3. 用户手册
  4. 过滤器 Filters

用户手册 · 过滤器(Filters)

本章详细说明 GoodSync 的 Job 过滤器系统 — 包含/排除规则、通配符、按路径/名称/大小/时间/属性匹配的完整语法、any/all 限定符与过滤器组合规则。

概述

默认情况下,GoodSync 同步所有非隐藏、非系统的文件与文件夹。如果关闭排除选项,隐藏与系统文件也可被同步。

查看与配置 Filters:使用 Job → Options 菜单项,或右键 Job 选择「Options」,切换到「Filters」标签页。

Exclude Filters(排除过滤器,默认为空)

名称匹配 Exclude Filter 的文件或文件夹将被排除在同步之外。

例如:通常会排除目标文件 *.OBJ 与编辑器备份文件 *.BAK

NOTE:按设计,Exclusion 优先于 Inclusion。

Include Filters(包含过滤器,默认为空)

名称匹配 Inclusion Filter — 且不匹配任何 Exclusion Filter — 的文件与文件夹将被包含在同步中。

Include Filters 会先于 Exclude Filters 应用。无任何行的 Include Filter 等同于包含所有内容(即被忽略)。

从 Analyze 后的右键菜单添加 Filter

排除或包含文件/一组文件的最简便方式:执行 Analyze 后右键文件或文件夹,选择以下命令之一:

  • Exclude "/FolderName/FileName" file or folder — 仅排除该文件或文件夹(按其完整路径)。
  • Exclude All "ItemName" files or folders — 排除任何子文件夹中所有名为 ItemName 的文件或文件夹。
  • Exclude All "*.ext" files — 排除所有子文件夹中扩展名为 ext 的文件。
  • Include Only "/FolderName/FileName" file or folder — 仅包含该文件或文件夹(按其完整路径)。
  • Include Only "*.ext" files — 包含所有子文件夹中扩展名为 ext 的文件。

这些命令会向 Jobs → Options → Filters 中的 Exclusions/Inclusions 列表添加一行。

预设 Exclude Filter 选项

提供一组带勾选框的预设 Exclude Filter 选项,可一键启用或禁用:

  • Exclude empty folders(默认未勾选)— 若勾选,排除空文件夹或仅含空文件夹的文件夹。文件夹被视为空:不含任何文件、或仅含被 Filters 排除的文件。
  • Exclude Hidden files and folders(默认勾选)— 排除带「Hidden」属性的文件与文件夹。
  • Exclude System files and folders(默认勾选)— 排除带「System」属性的文件与文件夹。
  • Exclude Temporary files and folders(默认勾选,仅 Windows)— 排除不值得保存的临时文件与文件夹。

复制与粘贴 Filters

使用「Copy All」与「Paste」按钮可在 Include 与 Exclude 之间,以及不同 Job 之间复制粘贴 Filters。

Filter 语法与参数

通配符(Wildcards)

  • * — 匹配任意字符序列。
  • ? — 匹配任意单个字符。
  • [a-z] — 匹配字符范围(如 a 到 z)。
  • \c — 匹配字符 c — 当要匹配的字符是 *?[ 时使用。
  • / — 文件夹分隔符(不要使用 \,即便在 Windows 上也不行)。

path / name 匹配

path /folder/file — 以「path /」(或仅「/」)开头的行 — 把文件或文件夹的路径(相对于同步文件夹)与指定通配符或字符串匹配。

示例:

path /folder1/file2.ext     - 按路径匹配文件
path /Parent*               - 顶级文件夹为 "Parent" 的所有路径
path /[a-z0-9]*             - 顶级文件夹以 a-z 或 0-9 开头的所有路径
path /\[Originals\]         - 顶级文件夹为 "[Originals]" 的所有路径

NOTE:Include Filter path /folder 仅包含 /folder 本身,不包含其内的文件。要包含该文件夹内的文件,写为 path /folder/*

name filename/foldername — 以「name」开头的行 — 把文件或文件夹名称(路径的最后一段)与指定通配符或字符串匹配。

示例:

name *.xls               - Excel 文件
name *kiss*              - 名称含 "kiss" 的文件或文件夹
name *.???               - 三字符扩展名的所有文件与文件夹
name *.[a-z][a-z][a-z]   - 三字母扩展名的所有文件与文件夹
name \[Originals\]       - 名称为 "[Originals]" 的所有文件与文件夹

size 匹配(按文件大小)

以「any size」或「all size」开头的行允许按文件大小排除/包含文件:

any size<N      意为  size.left<N OR size.right<N
all size<N      意为  size.left<N AND size.right<N
any size>N      意为  size.left>N OR size.right>N
all size>N      意为  size.left>N AND size.right>N
any size=N      意为  size.left=N OR size.right=N
all size=N      意为  size.left=N AND size.right=N
any size!=N     意为  size.left!=N OR size.right!=N
all size!=N     意为  size.left!=N AND size.right!=N
any size>=N     意为  size.left>=N OR size.right>=N
all size>=N     意为  size.left>=N AND size.right>=N
any size<=N     意为  size.left<=N OR size.right<=N
all size<=N     意为  size.left<=N AND size.right<=N
any size[S1,S2] 意为  S1 <= size.left < S2 OR  S1 <= size.right < S2
all size[S1,S2] 意为  S1 <= size.left < S2 AND S1 <= size.right < S2

大小常量可以是字节数,或带后缀:

  • K = 千字节
  • M = 兆字节

「size」匹配行中不允许有空格。非文件项(文件夹、链接、已删除或不存在的文件)在 size 比较中视为大小 0。

示例:

all size>=100   - 两侧均≥100 字节的文件
any size<2K     - 两侧任一边大小<2,048 字节(1K=1024)的文件,链接与已删除文件也算
all size=3M     - 两侧均恰好为 3,145,728 字节(1M=1024×1024)的文件

time 匹配(按修改时间)

以「any time」或「all time」开头的行允许按修改时间排除/包含文件:

any time<T       意为  time.left<T OR time.right<T
all time<T       意为  time.left<T AND time.right<T
any time>T       意为  time.left>T OR time.right>T
all time>T       意为  time.left>T AND time.right>T
any time=T       意为  time.left=T OR time.right=T
all time=T       意为  time.left=T AND time.right=T
any time!=T      意为  time.left!=T OR time.right!=T
all time!=T      意为  time.left!=T AND time.right!=T
any time>=T      意为  time.left>=T OR time.right>=T
all time>=T      意为  time.left>=T AND time.right>=T
any time<=T      意为  time.left<=T OR time.right<=T
all time<=T      意为  time.left<=T AND time.right<=T
any time[S1,S2]  意为  S1 <= time.left <= S2 OR  S1 <= time.right <= S2
all time[S1,S2]  意为  S1 <= time.left <= S2 AND S1 <= time.right <= S2

其中 T 是日期,可使用以下格式:

  • YYYY/MM/DD — 年/月/日
  • -Nd — N 天前
  • +Nd — N 天后
  • -Nh — N 小时前
  • +Nh — N 小时后
  • -Nm — N 分钟前
  • +Nm — N 分钟后

「time」匹配行中不允许有空格。仅已存在(未删除)的文件参与 time 比较。非文件对象(文件夹、链接、已删除文件)的修改时间视为 NullTime(1970 年 1 月 1 日)。

示例:

any time>=2008/7/4  - 任一侧在 2008-07-04 00:00 或之后修改的文件
all time<-5d        - 两侧均早于 5 天前的文件
time>=+7d           - 任一侧 7 天后或更晚修改的文件

is / exist 谓词

以「is」开头的行匹配文件与文件夹的属性:

  • isfolder — 匹配文件夹
  • isfile — 匹配文件
  • issymlink — 匹配符号链接或 Junction
  • ishidden — 匹配带 hidden 属性的文件与文件夹
  • issystem — 匹配带 system 属性的文件与文件夹(仅 Windows)
  • isarchive — 匹配带 archive 属性的文件与文件夹(仅 Windows)
  • isreadonly — 匹配带只读属性的文件与文件夹(仅 Windows)
  • isoffline — 匹配带 offline 属性的文件与文件夹(仅 Windows)
  • iscompressed — 匹配带 compressed 属性的文件与文件夹(仅 Windows)
  • isencrypted — 匹配带 encrypted 属性的文件与文件夹(仅 Windows,EFS 加密)

以「exist」开头的行匹配文件/文件夹的存在与否事实:

  • existboth — 文件或文件夹在左右两侧都存在
  • existany — 文件或文件夹在左侧、右侧或两侧存在
  • existone — 文件或文件夹仅在一侧存在

any / all 限定符

当左右两侧的文件修改时间不同时,必须使用「any」或「all」限定符以达到预期结果。

例:Exclude Filter time<-30d 对所有「left time < tNow - 30d 或 right time < tNow - 30d」的文件均为真。

因此,如果目标是排除两侧都早于 30 天的文件,应使用 all time<-30d — 等价于「left time < tNow - 30d AND right time < tNow - 30d」。

Filter 组合(Filter composition)

Filters 各行之间存在隐式 OR

每行可包含多个用分号「;」分隔的子句 — 同一行的子句之间存在隐式 AND

示例:

ishidden; name *.bak; all time <-60d
all size<1k

该 Filter 匹配「带 .BAK 扩展名、且两侧都早于 60 天的隐藏文件」「两侧大小均<1024 字节的文件」。

如果同时指定 Exclude 与 Include Filters,会先用 Include 过滤,再对其结果应用 Exclude。

更具体地说,对于:

Exclude Filter:
  ExcludeLine1
  ExcludeLine2
  ExcludeLine3

Include Filter:
  IncludeLine1
  IncludeLine2
  IncludeLine3

计算结果为:

(IncludeLine1 OR IncludeLine2 OR IncludeLine3) AND
NOT (ExcludeLine1 OR ExcludeLine2 OR ExcludeLine3)

仅绝对路径匹配(Absolute Paths Only match)

如果 Include Filter 中所有行都是绝对路径匹配/folderpath /folder),将应用「仅绝对路径匹配」 — 仅与 Filter 行匹配的路径会被包含。

如果 Include Filter 中存在任何非路径匹配name 模式time -Ndsize N 等),则所有文件夹都被包含在匹配中 — 以便其内文件可被非路径过滤器匹配。