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

如何用Bash一行命令删除目录中除指定模式外的所有文件?

解决find命令多排除模式的删除问题

要实现删除directory目录中除string1_1、string2_1、string3_1之外的所有文件,你需要修正find命令的逻辑语法,具体命令如下:

find directory/ -type f ! \( -name 'string1_1' -o -name 'string2_1' -o -name 'string3_1' \) -delete

原命令的问题分析

你之前的命令find directory/ -type f ! -name 'string1_'||'string2_'||'string3_' -delete存在两个关键错误:

  1. 逻辑或的语法错误:||是Shell层面的逻辑或运算符,而非find命令内置的语法。find中表示逻辑或需要用-o参数。
  2. 优先级问题:!(取反)的优先级高于-o,如果不用括号\( \)将多个-name条件分组,!只会对第一个-name 'string1_'生效,而非对所有排除条件的整体取反。

额外提示

  • 在执行带-delete的命令前,建议先移除-delete参数运行一遍,确认输出的文件列表是你想要删除的目标,避免误删重要文件。
  • 如果需要匹配前缀(比如所有以string1_开头的文件),可以将-name 'string1_1'改成-name 'string1_*'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:02:34