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

如何编写删除前缀为logtest且排除自身的批量文件删除命令

问题解答

你尝试的rm -r -- !(logtest.*)未生效有两个核心原因:

  1. !(pattern)是Bash的扩展通配符语法,默认未开启,直接写不会被识别
  2. 匹配规则错误:!(logtest.*)的逻辑是「排除所有文件名以logtest.开头的文件」,完全不符合你要排除纯logtest文件的需求。

正确实现方案

方案1:Bash扩展通配符(适合当前使用Bash的场景)

首先开启扩展通配符功能:

shopt -s extglob

执行删除命令:

rm -r -- logtest?*

规则说明:?匹配1个任意字符,*匹配0个及以上任意字符,logtest?*刚好匹配所有logtest开头且后面至少有1个字符的文件/目录,天然排除纯logtest文件。
注意:执行删除前可以先运行ls -d logtest?*预览匹配到的文件,确认无误后再执行删除

方案2:find命令(跨Shell通用,更稳妥)

不需要开启任何额外功能,适配所有Shell环境,还可以加更多过滤规则避免误删:

find . -maxdepth 1 -name "logtest?*" ! -name "logtest" -exec rm -r {} +

参数说明:

  • -maxdepth 1:只扫描当前目录,不会递归到子目录匹配文件,避免误删子目录内的同名文件
  • ! -name "logtest":显式排除纯logtest文件,双重保险
  • -exec rm -r {} +:将所有匹配到的文件/目录传给rm -r执行删除

如果只需要删除普通文件不需要删目录,可以调整命令为:

find . -maxdepth 1 -type f -name "logtest?*" -delete

内容的提问来源于stack exchange,提问作者TONY FRANK C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:09:01