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

Linux系统如何使用rm命令删除目录内除指定子目录外的内容

问题原因

你执行的命令报错核心原因是:-not 是find命令的匹配规则参数,并非rm命令的原生选项,直接传给rm时会被识别为无效选项,因此触发invalid option -- 'n'报错。

可行解决方案

以下方案均在CentOS 7环境验证可用,你可以根据场景选择:

  • 方案1:find匹配删除(最稳妥,无依赖,适合批量场景)
    该方案不需要修改shell配置,通过find精准匹配要删除的内容,不会误深入dir2目录操作:
    # 直接在当前路径执行即可,不需要切换目录
    find ./jpeg -maxdepth 1 ! -name 'dir2' ! -name 'jpeg' -exec rm -rf {} +
    
    参数说明:
    • -maxdepth 1:仅匹配jpeg目录下的一级内容,不会递归进入dir2等子目录
    • ! -name 'dir2':排除要保留的dir2目录
    • ! -name 'jpeg':排除jpeg目录本身,避免把整个jpeg目录删掉
  • 方案2:bash扩展通配符删除(写法最简洁)
    开启bash的extglob扩展通配符支持后,可以直接用排除语法匹配要删除的内容:
    # 临时开启扩展通配符
    shopt -s extglob
    # 执行删除
    rm -rf jpeg/!(dir2)
    # 操作完成后可选择关闭扩展通配符,恢复默认shell行为
    shopt -u extglob
    
    其中jpeg/!(dir2)会自动匹配jpeg目录下除了dir2之外的所有文件、子目录。
  • 方案3:明确指定删除目标(最不容易出错,适合目录内容少的场景)
    你当前jpeg目录下需要删除的内容是固定的3个jpeg文件和dir1目录,直接指定路径删除即可,完全没有匹配误判风险:
    rm -rf jpeg/1.jpeg jpeg/2.jpeg jpeg/3.jpeg jpeg/dir1
    
安全提示

执行带rm -rf的命令前,建议先把命令里的rm -rf替换成ls执行一次,确认输出的待操作文件列表完全符合预期后,再替换回rm -rf执行,避免误删重要数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:06:21