0

我想用它find来查找_101_名称而不是扩展名的.jpg文件.wsq,但我无法让它工作。

我试过这样的事情:

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

但它不起作用。

我究竟做错了什么?

4

2 回答 2

3

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

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

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

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

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

于 2021-06-15T18:00:20.573 回答
1

您需要使用括号(或@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' \)
于 2021-06-15T18:11:36.333 回答