Syncthing是一款开源的文件同步程序,如果有一个VPS就可以将自己本地文件夹与服务器同步。Syncthing可以选择通过全球服务器节点连接至自己的服务器,也可以本地直接与自己的服务器连接(前提是自己的服务器有公网IP),当然这些都是废话,百度就有一堆,今天说的是Syncthing同步文件夹时怎样忽略文件,就是不上传自己不想上传的文件。
其实主要就是翻译Syncthing的文档,地址在这https://docs.syncthing.net/users/ignoring.html
如果某些文件不应与其他设备同步,则可以创建一个名为.stignore的文件,其中包含要忽略的文件模式。.stignore文件必须放在文件夹的根目录中。.stignore文件本身永远不会同步到其他设备,但可以使用 #include 来包含在设备之间同步的文件。所有模式语法都从文件夹根目录开始生效。生效是以根目录为基准的。
文件虽然被忽略,但文件夹也不会被删除。如果需要删除文件夹,使用(?d)
1 .stignore文件包含文件或路径模式的列表。匹配语法从上至下生效。
2 一般文件名与自身匹配,即语句foo匹配文件 foo、subdir/foo以及任何名为 foo 的目录。空格被视为常规字符。即一般语句与文件名、文件夹名匹配,并且从根目录起逐级匹配。
3 星号 * 匹配文件名中的零个或多个字符,但与目录分隔符不匹配。te*st 匹配 test 、subdir/telerest 但不匹配 tele/rest。
4 双星号 ** 匹配如上,但也包含目录分隔符。te**st 匹配 test、subdir/telerest和 tele/sub/dir/rest。
5 问号 ?匹配单个字符,但不匹配目录分隔符。如 te??st 匹配 tebest 但不是 teb/st 或 test 。
6 括在方括号 [] 中的字符被解释为字符范围[a-z]。在使用此语法之前,您应该对正则表达式字符类有基本的了解。
7 目录分隔符 / 表示仅在当前目录中匹配。/foo 匹配 foo 但不匹配 subdir/foo。
8 以#include开头的语句会从指定文件加载匹配模式。文件不存在或被包含多次是错误的。请注意,虽然这可以用于包含子目录中文件的模式,但模式本身仍然相对于文件夹根目录。示例:#include more-patterns.txt。
9 一个以!开头的 匹配语句表示否定 :上传包含匹配文件(即不被忽略)。这可以用于覆盖后面的更一般的模式。
10 以 (?i) 前缀开头的模式允许不区分大小写的匹配。(?i)test 匹配 test,TEST和 tEsT。 (?i) 前缀可以与其他模式组合,例如语句
(?i)!picture*.png 表示Picture1.PNG应该同步。在Mac OS和Windows上,模式始终不区分大小写。
11 以 (?d) 为前缀开头的语句表示可以删除这些文件,如果它们阻止了目录删除。任何操作系统生成的文件都应该使用此前缀,应该将其删除。
12 以//开头的行是注释,没有任何效果。
13 Windows不支持转义\ [foo - bar \]。
14 前缀可以按任何顺序排列(例如“ (?i)(?d) ”),但不能在一对括号中(不是“ (?di) ”)。
给定目录结构
.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 # 忽略,由于父目录被忽略