使用 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' \)
我想使用 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' \)