Syncthing项目中的.stignore文件详解:文件同步排除规则指南
什么是.stignore文件
在Syncthing文件同步工具中,.stignore
文件是一个强大的配置文件,用于控制哪些文件或目录不应该被同步到其他设备。这个文件类似于Git中的.gitignore
文件,但专为Syncthing设计。
文件基本规范
- 文件位置:必须放在同步文件夹的根目录下
- 文件命名:必须命名为
.stignore
- 编码格式:必须使用UTF-8编码
- 同步特性:
.stignore
文件本身不会被同步到其他设备
模式匹配规则详解
基础匹配规则
- 直接匹配:
filename
会匹配所有名为"filename"的文件或目录 - 星号(*):匹配任意数量字符(不包括路径分隔符)
- 示例:
*.tmp
匹配所有.tmp后缀文件
- 示例:
- 双星号()**:匹配任意数量字符(包括路径分隔符)
- 示例:
**/temp
匹配所有层级目录下的temp目录
- 示例:
- 问号(?):匹配单个非路径分隔符字符
- 示例:
file?.txt
匹配file1.txt但不匹配file10.txt
- 示例:
高级匹配规则
- 字符范围:使用
[]
指定字符范围- 示例:
[a-z]
匹配任意小写字母
- 示例:
- 多选模式:使用
{}
指定多个选项- 示例:
{*.jpg,*.png}
匹配所有jpg和png文件
- 示例:
- 根目录匹配:以
/
开头的模式只匹配根目录- 示例:
/config
只匹配根目录下的config文件
- 示例:
特殊前缀
-
排除模式(!):
!pattern
表示包含匹配的文件- 示例:
*.tmp
后跟!important.tmp
会排除所有.tmp文件但保留important.tmp
- 示例:
-
大小写不敏感(?i):
(?i)pattern
使匹配不区分大小写- 示例:
(?i)readme
匹配README、readme等
- 示例:
-
可删除标记(?d):
(?d)pattern
标记的文件可被删除以允许目录删除- 适用于系统生成的临时文件
-
注释:以
//
开头的行是注释
包含其他文件
使用#include
指令可以包含其他文件中的规则:
#include more-rules.txt
注意:包含文件的路径是相对于.stignore
文件所在目录的。
实际应用示例
常见使用场景
-
排除系统文件:
(?d).DS_Store (?d)Thumbs.db (?d)desktop.ini
-
排除特定目录:
/node_modules /build /dist
-
排除特定类型文件但保留部分:
*.log !error.log
综合示例
假设有以下目录结构:
project/
.git/
build/
dist/
src/
config.json
README.md
temp/
对应的.stignore
文件:
// 排除版本控制目录
.git/
// 排除构建产物
build/
dist/
// 排除临时文件但保留重要的
temp/*
!temp/important
// 排除日志文件但保留错误日志
*.log
!error.log
// 允许删除系统生成的文件
(?d).DS_Store
(?d)Thumbs.db
注意事项
- 匹配顺序:第一个匹配的规则决定文件是否被忽略
- 目录处理:以
/
结尾的模式只匹配目录内容,不匹配目录本身 - 性能考虑:复杂的排除规则可能影响扫描性能
- Windows限制:Windows下无法使用反斜杠转义特殊字符
最佳实践建议
- 将
.stignore
文件纳入版本控制(如Git) - 为不同项目类型创建模板(如前端项目、后端项目等)
- 定期审查
.stignore
规则,移除不再需要的排除项 - 在团队中共享一致的
.stignore
配置
通过合理使用.stignore
文件,可以显著提高Syncthing的同步效率和存储空间利用率,同时保护敏感数据不被意外同步。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考