rsync不支持直接白名单过滤,需用--include/--exclude规则链控制同步:先包含后排除,顺序关键;常用--exclude排除特定后缀,如--exclude='.log';严格只同步某后缀须--include='.txt' --include='.md' --exclude='';--filter支持更精细规则;-n和-i可预览验证。

rsync 本身不提供“只同步某后缀”这种白名单式过滤,而是靠 --exclude(排除)或 --include(包含)规则链来控制文件是否参与同步。关键在于规则顺序和匹配逻辑:rsync 从上到下逐条匹配,一旦命中就停止判断;默认行为是“排除所有未被显式包含的项”,所以用 --include 必须配合 --exclude='*' 才能生效。
用 --exclude 排除指定后缀(最常用)
适合多数场景:你想同步全部内容,但跳过某些临时、日志或编译产物文件。
- 排除 .log 和 .tmp 文件:
rsync -av --exclude='*.log' --exclude='*.tmp' /src/ /dst/ - 排除整个 build/ 目录及其中所有 .o 文件:
rsync -av --exclude='build/' --exclude='**/*.o' /src/ /dst/
(**表示任意层级的子目录) - 注意:通配符需加单引号,防止 shell 提前展开;路径匹配基于源端相对路径,比如
/src/a/b/file.log中的a/b/file.log才参与匹配
用 --include + --exclude 实现“仅同步某后缀”
当你要严格限定只传 .txt 和 .md 文件时,必须先包含、再排除其余所有:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
rsync -av --include='*.txt' --include='*.md' --exclude='*' /src/ /dst/- 顺序不能颠倒:--exclude='*' 必须放在最后,否则前面的 --include 不生效
- 如果还想保留目录结构(哪怕目录里没匹配文件),加
--include='*/'放在 --exclude 前面,例如:rsync -av --include='*/' --include='*.sh' --exclude='*' /src/ /dst/
用 --filter 灵活写复合规则
--filter 是更底层的控制方式,支持更精细的语法,比如按路径前缀、文件大小、修改时间过滤:
- 排除所有隐藏文件(以 . 开头):
rsync -av --filter="exclude /.*" /src/ /dst/
(/.*表示根目录下的隐藏项;**/.*表示所有层级) - 只同步最近 7 天修改过的 .conf 文件:
rsync -av --filter="include */" --filter="include *.conf" --filter="exclude *"无法直接判断时间,需配合--max-age=7或先用 find 筛选 - 实际中常把复杂规则写进文件,用
--filter=". filter.rules"引入
验证规则是否生效的小技巧
加 -n(dry-run)和 -v 可预览哪些文件会被处理,避免误操作:
-
rsync -avn --exclude='*.log' /src/ /dst/→ 显示将跳过哪些 .log 文件 - 加
--itemize-changes(简写-i)能看到每行开头的标记,比如c表示内容变更、.f表示被 exclude、.d表示目录被跳过 - 对不确定的路径,先在源目录运行
find . -name "*.log" | head -10看实际路径结构,再写匹配模式










