为什么带有 -a 选项/标志的 find.-maxdepth 1 在 Linux 上没有返回任何结果?

为什么带有 -a 选项/标志的 find.-maxdepth 1 在 Linux 上没有返回任何结果?

我想查找所有 png 和 jpg 文件,并使用以下命令,但没有返回任何结果,但如果我用它替换,则会-a显示-o文件列表。这是为什么?

`find . -maxdepth 1 \( -iname \*\.png -a -iname \*\.jpg \)

答案1

逻辑错误。你所说的find是:

在此文件夹中查找所有文件(PNG 和 JPG)

但当然,没有文件两个都同时,这就是为什么作品-o

在此文件夹中查找所有 (PNG 或 JPG) 文件

在构建这些查询时,想象一下find将每个文件传递给测试。然后应用布尔逻辑.例如:

  • 它找到一个 .txt 文件。它不是 PNG(false),也不是 JPG(false),所以假 && 假等于 false

  • 它发现是一个 .png 文件。它是 PNG(真),而不是 JPG(假),所以真假等于 false

  • 它发现是一个 .jpg 文件。它不是 PNG(false),而是 JPG(true),所以假 && 真等于 false

  • 如果你使用-o开关,并且它找到一个 .png 文件,那么它是一个 PNG(真),而不是 JPG(假),所以真 || 假等于真。

答案2

-a 是逻辑与,意味着文件名必须以 .PNG 和 .JPG 结尾才为真。

-o 是逻辑上的“或”,意味着文件名必须以 .PNG 或 .JPG(或两者)结尾才为真。

相关内容