使用 find 查找具有特定模式而不是其他模式的文件

Using find to find files WITH a certain pattern and not other pattern

我想使用 find 来查找名称中带有 _101_ 而不是 .jpg.wsq 扩展名的文件,但我无法使用它。

我试过这样的事情:

find . -type f  -name '*_101_*' -o -not -name *.jpg -o -name *.wsq

但是没用。

我做错了什么?

您的尝试“匹配 _101_,或者不以 .jpg 结束,或者不以 .wsq 结束”。这将匹配每个单独的文件,仅基于两个扩展名,因为一个文件只能有一个。

你必须以不同的方式分组:

find . -type f -name '*_101_*' -not -name '*.jpg' -not -name '*.wsq'

这适用于所有规则(暗含逻辑与)。

您还应该将参数引用到 -name,否则它们可能会被 shell 而不是 find 扩展。

您需要使用括号(或@Benjamin 的解决方案)

否则a or not b or c被计算为(a or not b) or c

并且您需要 and 而不是 or 来仅过滤满足两个条件(通过两个测试)的文件。 a and not (b or c)

find -name '*_101_*' -not \( -name '*.jpg' -o -name '*.wsq' \)