用戶手冊 · 過濾器(Filters)
概述
預設情況下,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— 匹配符號連結或 Junctionishidden— 匹配帶 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 中所有行都是絕對路徑匹配(/folder 或 path /folder),將應用「僅絕對路徑匹配」 — 僅與 Filter 行匹配的路徑會被包含。
如果 Include Filter 中存在任何非路徑匹配(name 模式、time -Nd、size N 等),則所有文件夾都被包含在匹配中 — 以便其內文件可被非路徑過濾器匹配。