精确控制同步内容:OneDrive Client for Linux客户端过滤规则(skip_file/skip_dir)实战
【免费下载链接】onedriveOneDrive Client for Linux项目地址: https://gitcode.com/gh_mirrors/onedri/onedrive
OneDrive Client for Linux 是一款面向 Linux 系统的开源 OneDrive 同步客户端,而skip_file与skip_dir过滤规则正是它实现"精确控制同步内容"的核心能力。无论是阻止临时文件上传云端,还是把大型目录排除在同步范围之外,都可以通过这两个配置项完成。本文带你从配置文件入手,快速掌握 OneDrive 同步过滤规则的写法、匹配逻辑与常见坑点。
过滤规则在 OneDrive 同步中的位置
OneDrive Client for Linux 默认会把本地sync_dir目录与云端 OneDrive 完整双向同步。当你不希望某些内容参与同步时,可以启用**客户端侧过滤(Client Side Filtering)**规则——所有规则都在本机匹配,只有未被规则命中的文件才会参与上传/下载。
整体同步活动流如下图所示,可以看到过滤检查贯穿于本地扫描与云端对账的每个环节:
过滤规则的检查顺序(重要)
一个常见疑问是:多个过滤配置同时存在时,谁先谁后?客户端按固定顺序逐级检查本地路径,任意一级命中即跳过该项:
检查顺序依次为:
.nosync标记文件(需开启check_nosync)skip_dotfiles(跳过所有点文件/点目录)skip_symlinks(跳过符号链接)skip_dir(跳过目录)skip_file(跳过文件)sync_list(白名单式选择性同步)skip_size(跳过超大文件)
理解这个顺序后,你就不必担心规则之间"打架"——它们是逐层叠加的。
skip_file 实战:让指定文件不参与同步
skip_file用于排除特定文件。它内置了一组默认规则(编辑器的临时文件、Vim 交换文件、浏览器半程下载文件等):
~*|.~*|*.tmp|*.swp|*.partial⚠️关键陷阱:如果你在配置文件中自定义
skip_file,会整体覆盖上述默认值。强烈建议把自己的规则追加在默认规则之后,例如:
skip_file = "~*|.~*|*.tmp|*.swp|*.partial|*.bak|never_sync.file"匹配语法要点:
- 📁 路径均相对于
sync_dir(默认~/OneDrive) *与?通配符受支持,匹配不区分大小写- 用
|分隔多条规则 - 写
*.txt表示跳过任意位置的 txt 文件 - 写
/Documents/keepass.kdbx(带前导/)表示只跳过sync_dir根下的精确路径
该选项在配置文件中可以写多行,效果与用|拼接等价,方便按类别分组维护:
skip_file = "~*|.~*|*.tmp|*.swp|*.partial" # 保留默认 skip_file = "*.blah" # 自定义规则 skip_file = "/Documents/keepass.kdbx"更完整的参数说明见 application-config-options.md。
skip_dir 实战:排除整个目录
skip_dir用于排除整个目录(连同其下所有内容)。它支持两种写法:
| 写法 | 含义 | 示例 |
|---|---|---|
单条目(无前导/) | 匹配任意层级中名为该名称的目录 | Desktop |
完整路径(前导/) | 仅跳过sync_dir根下的精确路径 | /Documents/Visual Studio* |
示例配置:
skip_dir = "Desktop|Documents/IISExpress|Documents/Visual Studio*|cache"还有一个进阶选项skip_dir_strict_match:设为"true"后,skip_dir条目必须是完整路径才生效,适合你只想排除特定位置、而不想"同名全杀"的场景:
skip_dir = "/Projects/work" skip_dir_strict_match = "true"参数文档详见 application-config-options.md。
常用组合搭配:点文件、符号链接与 .nosync
除了主角之外,还有几个"辅助过滤"值得了解:
skip_dotfiles = "true":一键跳过.config、.git等点文件/点目录skip_symlinks = "true":跳过指向同步目录之外的符号链接skip_size = "50":跳过大于 50MB 的文件(单位 MB)check_nosync = "true"+.nosync空文件:在任意本地目录放一个.nosync文件即可临时排除该目录,改主意时删掉文件即可,比改配置更灵活
本地新文件参与同步前,客户端会先做过滤判定,处理流程如下图所示(图中"checkPathAgainstClientSideFiltering"节点即上一节的检查顺序):
验证与生效:修改规则后必须 resync
这是新手最容易踩的坑:修改skip_file/skip_dir后,不会立即自动生效,需要执行一次--resync重新同步。推荐"先验证、后生效"三步走:
- 看配置:
onedrive --display-config确认规则被正确读取 - 干跑测试:
onedrive --sync --dry-run预演一遍,观察哪些文件被"Skipping item"跳过 - 正式生效:
onedrive --sync --resync让新规则生效
💡 也可以在命令行用
--skip-file/--skip-dir临时传参,但注意:CLI 传参会替换配置文件中的条目,而非追加。
resync 的注意事项详见 application-config-options.md。
常见问题 FAQ
Q:skip_dir 会删除云端已同步的目录吗?不会。规则只影响"是否继续同步",已同步的云端数据保留在 OneDrive 上,只是本地不再跟进它的变更。
Q:只想同步少数目录,而不是排除少数目录,怎么办?使用白名单机制sync_list文件(放在~/.config/onedrive/),默认排除一切、只同步你列出的路径,适合"选择性同步"场景,文档见 usage.md。
Q:临时文件到底跳没跳过?用--dry-run跑一次,日志中出现Skipping item - excluded by skip_file之类的字样即表示命中。过滤逻辑的源码实现位于 clientSideFiltering.d,架构原理可参考 client-architecture.md。
小结
| 配置项 | 作用 | 典型用途 |
|---|---|---|
skip_file | 按通配/路径跳过文件 | 排除*.bak、编辑器临时文件 |
skip_dir | 跳过目录 | 排除node_modules、缓存目录 |
skip_dotfiles/skip_symlinks | 按类型跳过 | 点文件、符号链接 |
skip_size | 按大小跳过 | 超大视频、镜像文件 |
.nosync | 目录级临时开关 | 临时排除某个目录 |
sync_list | 白名单式选择性同步 | 只同步指定目录 |
掌握skip_file与skip_dir的写法,配合--dry-run验证和--resync生效,你就能让 OneDrive Client for Linux 只同步真正需要的内容——既省空间,又不误传临时文件。
【免费下载链接】onedriveOneDrive Client for Linux项目地址: https://gitcode.com/gh_mirrors/onedri/onedrive
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考