如何在排除特定类型文件的同时包含其他类型文件?
美国、香港服务器
如何在排除特定类型文件的同时包含其他类型文件?
12-04 来源:
在 Rclone 中实现「排除特定类型 + 仅包含目标类型」的精准过滤,核心是先通过 --include 定义白名单(仅保留的类型),再用 --exclude "*" 兜底排除所有未匹配项;或反向先排除特定类型,再按需补充包含规则,以下是分场景的实操方法,兼顾简洁性和精准性:
一、核心逻辑(必理解)
Rclone 过滤规则遵循「包含规则优先级 > 排除规则」,且「兜底排除 --exclude "*"」会删除所有未被 --include 匹配的文件 / 类型,这是实现 “仅保留指定类型” 的关键。
二、场景 1:仅保留指定类型,自动排除其他所有类型(推荐)
适合明确知道要保留哪些类型(如仅同步 .conf/.sql),无需逐个排除其他类型的场景,语法:
bash
运行
rclone sync [源路径] [目标路径] -P --include "*.保留类型1" --include "*.保留类型2" --exclude "*"
示例 1:仅同步 .conf 和 .sql,排除所有其他类型
bash
运行
# 仅保留配置文件和数据库备份文件,排除 tmp/zip/log 等所有其他类型
rclone sync /data alioss:backup -P \
--include "*.conf" \
--include "*.sql" \
--exclude "*"
示例 2:仅同步指定目录下的 .log,排除其他所有类型
bash
运行
# 仅保留 /data/logs 目录下的 .log 文件(含子目录),排除其他所有文件/类型
rclone sync /data alioss:backup -P \
--include "/data/logs/**/*.log" \
--exclude "*"
三、场景 2:先排除特定类型,再保留部分例外(反向过滤)
适合需要 “排除大部分类型,仅保留少数例外” 的场景(如排除所有压缩包,仅保留 .tar.gz),语法:
bash
运行
rclone sync [源路径] [目标路径] -P --exclude "*.排除类型1" --exclude "*.排除类型2" --include "*.例外类型"
示例:排除所有压缩包(zip/rar/7z),仅保留 .tar.gz
bash
运行
rclone sync /data alioss:backup -P \
--exclude "*.zip" \
--exclude "*.rar" \
--exclude "*.7z" \
--include "*.tar.gz" # 例外:保留 tar.gz 类型
四、场景 3:混合过滤(限定目录 + 类型包含 / 排除)
适合需要 “在指定目录排除某类型,其他目录保留该类型” 的复杂场景。
示例:排除 /data/tmp 下的 .log,但保留其他目录的 .log,且仅同步 .log/.conf 类型
bash
运行
rclone sync /data alioss:backup -P \
--exclude "/data/tmp/**/*.log" # 排除 tmp 目录下的 log
--include "*.log" # 保留其他目录的 log
--include "*.conf" # 保留所有目录的 conf
--exclude "*" # 兜底排除其他类型
五、批量配置:通过过滤文件实现(规则较多时)
若包含 / 排除的类型较多,建议编写过滤文件(如 filter-rules.txt),避免命令行过长。
1. 编写过滤文件
txt
# filter-rules.txt 内容
# 先定义包含规则(+ 开头)
+ *.conf
+ *.sql
+ /data/docs/**/*.pdf # 仅保留 docs 目录下的 pdf
# 再定义排除规则(- 开头)
- /data/tmp/**/*.log # 排除 tmp 下的 log
- *.tmp # 排除所有 tmp 类型
- *.zip # 排除所有 zip 类型
# 兜底排除未匹配项
- *
2. 执行同步
bash
运行
rclone sync /data alioss:backup -P --filter-from filter-rules.txt
六、关键验证与避坑
1. 预演过滤效果(必做)
执行真实同步前,用 --dry-run 验证规则是否符合预期,避免误删 / 漏同步:
bash
运行
rclone sync /data alioss:backup -P --include "*.conf" --include "*.sql" --exclude "*" --dry-run
输出中会显示「Would transfer」(要同步的文件)和「Would exclude」(要排除的文件),确认无误后再移除 --dry-run。
2. 避坑要点
规则顺序:先写「包含规则」,再写「排除规则」,最后写 --exclude "*" 兜底;
通配符层级:*.log 匹配所有目录的 .log,/data/tmp/**/*.log 仅匹配 tmp 下的 .log;
大小写敏感:加 --ignore-case 忽略文件名大小写(如同时匹配 .LOG 和 .log)。
七、常用模板(直接复用)
需求场景 核心命令示例
仅同步 .sql/.bak,排除其他 rclone sync /data oss:backup -P --include "*.sql" --include "*.bak" --exclude "*"
排除 .tmp/.zip,保留其他所有 rclone sync /data oss:backup -P --exclude "*.tmp" --exclude "*.zip"
仅保留指定目录的 .pdf,排除其他 rclone sync /data oss:backup -P --include "/data/docs/**/*.pdf" --exclude "*"
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快