You need to enable JavaScript to run this app. GNU find跟随符号链接按名称模式匹配执行rm命令报错问题
优惠活动
大模型
产品
解决方案
定价
更多

GNU find跟随符号链接按名称模式匹配执行rm命令报错问题

问题原因

  • 核心原因是find -L会跟随所有符号链接遍历子目录,只要命中*.c.d规则的文件,就会触发一次-exec后的命令执行:
    你报错的a_b场景下,除了当前目录的a_b.c.d,符号链接指向的目录下也存在匹配*.c.d的同名文件,导致find触发了多次rm操作。第一次执行rm已经把目标.d文件删除,后续再执行rm时目标文件不存在,自然抛出No such file or directory错误。
    而a_x_b场景下,仅当前目录存在匹配的a_x_b.c.d,find只触发一次rm操作,所以执行正常。
  • 额外注意:你当前写的-exec bash -c 'rm $(basename {} .c.d).d' \;写法存在安全隐患,直接把{}嵌入bash代码块,若文件名包含空格、引号、换行等特殊字符,会出现代码注入或命令执行异常,正确的传参写法如下:
    find -L . -type f -name '*.c.d' -exec bash -c 'rm "$(basename "$1" .c.d).d"' _ {} \;
    

修复方案

如果你不需要处理子目录(包括符号链接指向的子目录)下的文件,只需要处理当前目录的匹配文件,给find加上-maxdepth 1参数限制遍历深度即可,不会重复触发rm操作:

find -L . -maxdepth 1 -type f -name '*.c.d' -exec bash -c 'rm "$(basename "$1" .c.d).d"' _ {} \;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:30:05