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

使用find命令实现复杂AND/OR字符串搜索的问题

解决find命令筛选多媒体文件并排除预告片的问题

嘿,我懂你的困扰——这其实是find命令里逻辑运算符优先级挖的坑!你原来的命令里,因为-or的优先级比默认的-and低,导致排除-trailer的条件只绑定到了最后一个文件格式规则上,所以带-trailer的mkv/mp4文件还是会被前面的规则匹配到,根本没被排除。

给你两个靠谱的解决方案:

方案1:用括号分组格式匹配条件

这是最通用、兼容性最好的写法,核心是把所有格式匹配的条件用括号括起来,确保它们作为一个整体和排除条件做逻辑与:

find . -type f \( -iname '*.mkv' -o -iname '*.mp4' -o -iname '*.avi' \) ! -iname '*-trailer*'

拆解一下各部分的作用:

  • \( ... \):转义括号(因为shell会把未转义的括号当作命令分组解析),把三个格式匹配规则打包成一个整体,确保-type f先和这个整体做“与”运算
  • -o:就是你用的-or的简写,作用完全一样
  • ! -iname '*-trailer*':表示排除所有文件名中包含-trailer片段的文件,不区分大小写

方案2:用正则表达式简化格式匹配

如果你觉得括号写法有点繁琐,可以用-iregex(不区分大小写的正则匹配)来一次性指定所有目标格式:

find . -type f -iregex '.*\.\(mkv\|mp4\|avi\)$' ! -iname '*-trailer*'

这里的正则.*\.\(mkv\|mp4\|avi\)$表示:匹配任意字符结尾是.mkv、.mp4或.avi的文件,同样搭配排除条件就能过滤掉预告片。

记得测试一下命令,比如你可以先加-print参数(其实默认就会打印),看看结果是不是符合预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:23:15