如何使用通配符进行文件过滤?
美国、香港服务器
如何使用通配符进行文件过滤?
12-03 来源:
Rclone 支持标准通配符语法实现精准的文件 / 目录过滤,核心通过 * ? ** 等通配符结合 --include/--exclude 系列参数,按「名称 / 路径 / 层级」筛选文件,以下是通配符的具体用法和场景化示例:
一、核心通配符语法(必掌握)
通配符 作用 示例 匹配结果
* 匹配任意字符(不含路径分隔符 /),仅限当前目录层级 *.log 匹配当前目录下所有 .log 文件(如 a.log),不匹配子目录下的 sub/a.log
? 匹配单个任意字符(不含 /) file?.txt 匹配 file1.txt、filea.txt,不匹配 file12.txt
** 匹配任意层级的目录 / 文件(含 /),支持递归匹配 tmp/** 匹配 tmp/ 目录下所有文件 / 子目录(如 tmp/a.txt、tmp/sub/b.log)
/ 路径分隔符,用于限定绝对 / 相对路径 /data/*.log 仅匹配 /data/ 目录下的 .log 文件,不匹配其他目录
[] 匹配指定范围内的单个字符(可选,进阶) file[1-3].txt 匹配 file1.txt、file2.txt、file3.txt
二、通配符过滤的核心规则
层级优先:* 仅匹配当前层级,** 匹配所有层级;
路径精准性:以 / 开头的规则为「绝对路径」(基于同步的源目录根),否则为「相对路径」;
规则顺序:更具体的通配符规则优先(如 /data/test*.log 优先于 *.log)。
三、场景化实操示例(按需求分类)
1. 基础匹配:当前目录的文件类型过滤
仅同步当前目录的 .log 文件(不包含子目录):
bash
运行
rclone sync /data alioss:backup -P --include "*.log" --exclude "*"
说明:*.log 匹配 /data/a.log,但不匹配 /data/sub/b.log;--exclude "*" 兜底排除其他所有文件。
排除当前目录的临时文件(.tmp/.bak):
bash
运行
rclone sync /data alioss:backup -P --exclude "*.tmp" --exclude "*.bak"
2. 递归匹配:跨目录的文件 / 目录过滤
排除所有层级的 tmp 目录(无论 tmp 在哪个目录下):
bash
运行
rclone sync /data alioss:backup -P --exclude "**/tmp/**"
说明:**/tmp/** 匹配 /data/tmp/、/data/sub/tmp/、/data/sub1/sub2/tmp/ 等所有层级的 tmp 目录。
仅同步所有层级的 .conf 配置文件:
bash
运行
rclone sync /data alioss:backup -P --include "**/*.conf" --exclude "*"
说明:**/*.conf 匹配 /data/a.conf、/data/sub/b.conf、/data/sub1/sub2/c.conf 等所有层级的 .conf 文件。
3. 精准路径匹配:限定目录层级
仅同步 /data/docs 目录下的 .pdf 文件(含子目录):
bash
运行
rclone sync /data alioss:backup -P --include "/data/docs/**/*.pdf" --exclude "*"
说明:/data/docs/**/*.pdf 限定仅匹配 /data/docs/ 下所有层级的 .pdf 文件,其他目录的 .pdf 排除。
排除 /data/cache 目录下的所有 .tmp 文件(仅该目录,不含子目录):
bash
运行
rclone sync /data alioss:backup -P --exclude "/data/cache/*.tmp"
说明:/data/cache/*.tmp 仅排除 /data/cache/ 下的 .tmp 文件,不排除 /data/cache/sub/a.tmp。
4. 字符范围匹配:? 和 [] 的进阶用法
匹配名称为「file + 单个字符 +.txt」的文件:
bash
运行
rclone sync /data alioss:backup -P --include "file?.txt" --exclude "*"
匹配结果:file1.txt、filea.txt、file_.txt,不匹配 file12.txt、file.txt。
匹配名称为「file + 数字 1-5+.log」的文件:
bash
运行
rclone sync /data alioss:backup -P --include "file[1-5].log" --exclude "*"
匹配结果:file1.log、file2.log…file5.log,不匹配 file6.log、filea.log。
5. 组合通配符:复杂场景过滤
仅同步 /data 下「以 backup 开头、.sql 结尾」的数据库备份文件(含子目录):
bash
运行
rclone sync /data alioss:backup -P --include "/data/**/backup*.sql" --exclude "*"
匹配结果:/data/backup_2025.sql、/data/db/backup_20251203.sql,不匹配 /data/other.sql。
排除所有层级的「隐藏文件 / 目录」(以 . 开头):
bash
运行
rclone sync /data alioss:backup -P --exclude "**/.*"
说明:**/.* 匹配 .git/、.ssh/、.bashrc 等所有隐藏文件 / 目录。
四、避坑要点
* vs ** 不要混用:
想匹配「当前目录」用 *(如 *.log);
想匹配「所有层级」必须用 **(如 **/*.log),仅写 *.log 会漏掉子目录文件。
绝对路径 vs 相对路径:
以 / 开头的规则是「绝对路径」(基于同步的源目录),如 /data/*.log 仅匹配源目录 /data/ 下的文件;
不以 / 开头的是「相对路径」,如 docs/*.txt 匹配所有层级下的 docs/ 目录里的 .txt 文件(如 /docs/a.txt、/sub/docs/b.txt)。
预演验证规则:
执行同步前,务必用 --dry-run 验证通配符规则是否正确,避免漏同步 / 误删除:
bash
运行
rclone sync /data alioss:backup -P --include "**/*.conf" --exclude "*" --dry-run
五、常用通配符过滤模板(直接复用)
需求场景 命令 / 规则示例
仅同步所有 .sql 备份文件 --include "**/*.sql" --exclude "*"
排除所有 node_modules 目录 --exclude "**/node_modules/**"
仅同步 /data 下的 .log(含子目录) --include "/data/**/*.log" --exclude "*"
匹配任意名称的压缩包(.zip/.tar.gz) --include "*.zip" --include "*.tar.gz" --exclude
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快