You need to enable JavaScript to run this app. 升级macOS Big Sur后Jenkins执行rm -rf删Xcode缓存时报错
优惠活动
大模型
产品
解决方案
定价
更多

升级macOS Big Sur后Jenkins执行rm -rf删Xcode缓存时报错

问题背景
  • 系统升级至macOS Big Sur后,在Jenkins中执行Xcode派生数据目录清理命令:
    rm -rf ~/Library/Developer/Xcode/DerivedData/*
  • 执行过程中触发报错:
    rm: /Users//Library/Developer/Xcode/DerivedData/AppDevelopment: Directory not empty
  • 脚本最终返回退出码1,和“-f参数可强制删除目标路径下所有内容”的预期不符。
为什么rm -f没有达到预期效果?

-f参数的实际作用是忽略不存在的文件报错、取消删除前的交互确认,它并不具备绕过系统权限、强制删除受保护文件的能力。只要删除流程中遇到无法移除的文件——不管是权限不足、还是被进程占用,哪怕加了-f也会抛出对应报错,最终导致父目录因为存在残留内容,触发“Directory not empty”的提示。

常见触发原因
  • 完全磁盘访问权限缺失:Big Sur及后续macOS版本对用户目录下的开发者路径增加了额外的权限校验,Jenkins进程如果没有获得完全磁盘访问权限,就无法删除DerivedData目录下的部分受保护文件,最终造成目录残留。
  • 文件被活跃进程占用:执行删除命令时,如果Xcode、xcodebuild等编译进程正持有AppDevelopment目录下的文件句柄,这些被占用的文件会无法移除,最终导致父目录删不干净。
  • 通配符匹配存在遗漏:命令中的通配符*默认不会匹配以.开头的隐藏文件(如目录锁文件、系统元数据),如果这部分文件因为权限问题没有被删除,就会造成目录非空的报错。
  • 环境变量配置异常:从报错中的空用户名路径(/Users//Library/...)可以判断,执行命令的Jenkins进程没有正确加载$HOME环境变量,导致实际访问的路径和预期存在偏差,出现权限不匹配的问题。
排查与解决方案
  • 配置Jenkins的系统权限
    打开macOS「系统设置」-「隐私与安全性」-「完全磁盘访问权限」,将Jenkins应用(或运行Jenkins的Java进程)加入允许列表,授权完成后重启Jenkins服务重试。
  • 释放占用目录的进程
    执行命令定位持有DerivedData目录文件句柄的进程:
    lsof +D ~/Library/Developer/Xcode/DerivedData/AppDevelopment
    正常退出查询到的活跃Xcode、编译类进程后,再重试删除操作。
  • 调整删除命令逻辑,规避通配符遗漏问题
    不要依赖通配符展开删除目录内容,直接对目标派生数据目录本身执行删除操作:
    rm -rf ~/Library/Developer/Xcode/DerivedData/AppDevelopment
    如果需要清空整个DerivedData目录,可以采用「删除根目录后重建」的方案,避免通配符无法匹配隐藏文件的问题:
    rm -rf ~/Library/Developer/Xcode/DerivedData && mkdir -p ~/Library/Developer/Xcode/DerivedData
  • 修正Jenkins的环境变量
    在执行删除命令前,强制指定正确的$HOME路径,避免出现空用户名的异常路径:
    export HOME=/Users/$(whoami)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 11:15:03