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

如何在Bash中使用find命令排除多个目录?

如何用find命令排除多个目录

嘿,我懂你遇到的问题了——你已经能用find排除单个目录,但尝试用-or组合多个-not -name时没得到预期结果,对吧?这其实是逻辑运算符优先级在搞鬼,咱们一步步来解决。

为什么你的原命令不生效?

find的逻辑运算符里,-and的优先级比-or高得多。你写的命令:

find * -mindepth 0 -maxdepth 0 -not -name first_folder -or -not -name second_folder

实际上会被解析成:

(匹配所有不是first_folder的项) OR (匹配所有不是second_folder的项)

这几乎会匹配当前目录下的所有内容——毕竟任何项要么不是first_folder,要么不是second_folder,自然达不到排除两个目录的目的。

正确的实现方法

方法1:用-and组合多个-not -name(最直观)

因为find默认逻辑是-and,所以你可以直接连续写多个-not -name,表示同时满足所有排除条件:

find * -mindepth 0 -maxdepth 0 -not -name first_folder -not -name second_folder

这个命令的意思是:列出当前目录下所有项,排除名为first_folder的,并且排除名为second_folder的。

方法2:用正则表达式批量匹配(适合排除大量目录)

如果要排除的目录很多,你可以用-name结合正则表达式(注意转义|):

find * -mindepth 0 -maxdepth 0 -not -name "first_folder\|second_folder"

或者用-regex选项(更灵活,适合复杂匹配):

find * -mindepth 0 -maxdepth 0 -not -regex ".*/\(first_folder\|second_folder\)$"

方法3:仅排除目录(避免误排除同名文件)

如果你的目标只是排除目录,而不是所有同名项,可以加上-type d限定:

find * -mindepth 0 -maxdepth 0 -type d -not -name first_folder -not -name second_folder

这样只会过滤掉这两个目录,不会影响和目录同名的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:18