You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync过滤目录异常:指定排除的f开头目录仍被同步复制

问题描述

目录结构如下:

f001 pics 2015/...
f002 pics 2016/...
f003 pics 2017/...
f004 pics 2018/...
f005 pics 2019/...
f006 pics 2020/...
f007 pics 2021/...
f008 pics 2022/...
j001 pics 2020/...
j002 pics 2021/...
j003 pics 2022/...
r001 pics 2020/...
r002 pics 2021/...
r003 pics 2022/...
t001 pics 2020/...
t002 pics 2021/...
t003 pics 2022/...

所有文件夹包含大量图片,且会频繁新增,现有数百个。需求为:仅复制以f开头的文件夹及其内容,但排除f001、f002、f003、f006、f007、f011目录。

执行的rsync命令:

rsync -avtP --filter="+ /f*/" --filter="- /f001*/" --filter='- /f002*/' --filter='- /f003*/' --filter='- /f006*/' --filter='- /f007*/' --filter='- /f011*/' --filter='- *' "/data/source/" /data/destination/

当前问题:非f开头的文件夹已被过滤,但f001等需排除的目录仍被复制。

解决方法

rsync的过滤规则按匹配顺序生效,一旦某条规则匹配成功,后续规则不再执行。原命令中+ /f*/优先匹配所有f开头目录(包括需排除的目标),导致后续排除规则无法触发,因此这些目录被复制。

正确做法是先排除特定f开头目录,再允许所有f开头目录,最后排除其他内容,修正后的命令:

rsync -avtP \
  --filter="- /f001/" \
  --filter="- /f002/" \
  --filter="- /f003/" \
  --filter="- /f006/" \
  --filter="- /f007/" \
  --filter="- /f011/" \
  --filter="+ /f*/" \
  --filter="- *" \
  "/data/source/" /data/destination/

说明:规则中的/用于明确匹配目录,避免误匹配同名文件;拆分多行是为了可读性,实际执行也可以写在一行。

内容的提问来源于stack exchange,提问作者eyesound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:48:52