自建同步服务syncthing的忽略模式语法

📅 2026/7/18 3:59:31 👁️ 阅读次数 📝 编程学习
自建同步服务syncthing的忽略模式语法

Syncthing是一款开源的文件同步程序,如果有一个VPS就可以将自己本地文件夹与服务器同步。Syncthing可以选择通过全球服务器节点连接至自己的服务器,也可以本地直接与自己的服务器连接(前提是自己的服务器有公网IP),当然这些都是废话,百度就有一堆,今天说的是Syncthing同步文件夹时怎样忽略文件,就是不上传自己不想上传的文件。

其实主要就是翻译Syncthing的文档,地址在这Ignoring Files — Syncthing documentation

1.忽略模式的配置文件

如果某些文件不应与其他设备同步,则可以创建一个名为.stignore的文件,其中包含要忽略的文件模式。.stignore文件必须放在文件夹的根目录中。.stignore文件本身永远不会同步到其他设备,但可以使用 #include 来包含在设备之间同步的文件。所有模式语法都从文件夹根目录开始生效。生效是以根目录为基准的。

文件虽然被忽略,但文件夹也不会被删除。如果需要删除文件夹,使用(?d)

2.匹配模式

1 .stignore文件包含文件或路径模式的列表。匹配语法从上至下生效。

2 一般文件名与自身匹配,即语句foo匹配文件foosubdir/foo以及任何名为foo的目录。空格被视为常规字符。即一般语句与文件名、文件夹名匹配,并且从根目录起逐级匹配。

3 星号 * 匹配文件名中的零个或多个字符,但与目录分隔符不匹配。te*st匹配testsubdir/telerest但不匹配tele/rest

4 双星号 ** 匹配如上,但也包含目录分隔符。te**st匹配test、subdir/teleresttele/sub/dir/rest

5 问号 ?匹配单个字符,但不匹配目录分隔符。如te??st匹配tebest但不是teb/sttest

6 括在方括号 [] 中的字符被解释为字符范围[a-z]。在使用此语法之前,您应该对正则表达式字符类有基本的了解。

7 目录分隔符 / 表示仅在当前目录中匹配。/foo匹配foo但不匹配subdir/foo

8 以#include开头的语句会从指定文件加载匹配模式。文件不存在或被包含多次是错误的。请注意,虽然这可以用于包含子目录中文件的模式,但模式本身仍然相对于文件夹根目录。示例:#include more-patterns.txt

9 一个以!开头的 匹配语句表示否定 :上传包含匹配文件(即不被忽略)。这可以用于覆盖后面的更一般的模式。

10 以 (?i) 前缀开头的模式允许不区分大小写的匹配。(?i)test匹配testTESTtEsT。 (?i) 前缀可以与其他模式组合,例如语句

(?i)!picture*.png表示Picture1.PNG应该同步。在Mac OS和Windows上,模式始终不区分大小写。

11 以(?d)为前缀开头的语句表示可以删除这些文件,如果它们阻止了目录删除。任何操作系统生成的文件都应该使用此前缀,应该将其删除。

12 以//开头的行是注释,没有任何效果。

13 Windows不支持转义\ [foo - bar \]。

14 前缀可以按任何顺序排列(例如“(?i)(?d)”),但不能在一对括号中(不是“(?di)”)。

3 例子

给定目录结构

.DS_Store foo foofoo bar/ baz quux quuz bar2/ baz frobble My Pictures/ Img15.PNG

.stignore文件的内容

(?d).DS_Store !frobble !quuz foo *2 qu* (?i)my pictures

解析:

.DS_Store # 忽略,如果妨碍父目录删除,将被删除 foo # 同步,不匹配“foo”但匹配“foo*” 或 “*foo” foofoo # 同步,不匹配“foo”但匹配“foo*” 或 “*foo” bar/ # 同步 baz # 同步 quux # 忽略,匹配“qu*” quuz # 同步,匹配“qu*” 但被前面的“!quiz”排除 bar2/ # 同步,虽然匹配 “*2” 但子目录文件同步了 baz # 忽略,由于父目录被忽略 frobble # 同步,“frobble” 按从上到下顺序生效 My Pictures/ # 忽略,匹配最后一条 Img15.PNG # 忽略,由于父目录被忽略

有空欢迎看我的个人博客:https://ming1z.cyou