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

关于rsync实现--delete-excluded效果且不启用隐含--delete的技术咨询

关于rsync实现--delete-excluded效果且不启用隐含--delete的技术咨询

嘿,这个问题我之前也碰到过,rsync的--delete-excluded确实有点坑——它默认会隐含启用--delete,这会把接收端里那些源目录没有、但又不在排除列表里的文件也一并删掉,完全不是我们想要的效果。不过别担心,有个巧妙的办法能帮你实现只删除接收端上指定的排除目录,同时保留其他不在源端的文件。

具体步骤如下:

  1. 创建排除规则文件
    先写一个名为exclude.txt的文件,把你想在接收端删除的目录列进去(注意目录名后面加斜杠,明确指定是目录):

    .cache/
    cache/
    
  2. 先删除接收端的目标排除目录
    运行这条命令(记得先加--dry-run测试,确认要删除的目录符合预期再去掉):

    rsync -av --dry-run --delete-excluded --exclude-from='exclude.txt' --include='*/' --exclude='*' /你的源目录路径/ /接收端目录路径/
    

    这里的参数作用:

    • -av:归档模式(保留权限、时间戳等属性)+ 详细输出,方便你查看执行过程
    • --delete-excluded:告诉rsync删除接收端上匹配排除规则的目录
    • --exclude-from='exclude.txt':读取我们写好的排除规则
    • --include='*/' --exclude='*':这是关键!让rsync只遍历目录结构,不同步任何文件,这样就只会处理目录的删除,不会碰其他文件,也不会触发--delete对非排除文件的删除操作
  3. 执行正常的同步操作
    确认删除操作没问题后,再运行正常的同步命令,不带任何删除参数,把源目录的内容同步到接收端:

    rsync -av --exclude-from='exclude.txt' /你的源目录路径/ /接收端目录路径/
    

为什么你之前的filter规则没生效?

你之前用的H .cache这类规则,其实是rsync里匹配隐藏文件/目录的过滤规则,但这种写法没有结合include/exclude的范围限制,无法精准触发只删除指定目录的逻辑,所以达不到预期效果。而上面的方法通过先限制rsync只处理目录,再配合--delete-excluded,就能精准定位到要删除的目录,同时避免误删其他文件。

备注:内容来源于stack exchange,提问作者The Bic Pen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:14:37