我想知道Linux中“find . -name '*.c' -or -name '*.cpp'”的确切命令

我想知道Linux中“find . -name '*.c' -or -name '*.cpp'”的确切命令

这几天在学习Linux下的shell。我有一个问题。

请看下面的命令:

$ find . -name '*.c' -or -name '*.cpp'

上面的命令在内部像下面的命令一样处理?

$ find . -name '*.c' -and -print -or -name '*.cpp' -and -print

答案1

man find说:

   If the whole expression contains no actions other than -prune or -print,
   -print is performed on all files for which the whole expression is true.

所以是的,它是等价的,但可能更容易将其视为:

find . \( -name '*.c' -or -name '*.cpp' \) -and -print

或更简单,并且符合 POSIX:

find . \( -name '*.c' -o -name '*.cpp' \) -print

答案2

基本上这两个命令的含义相同并显示相同的输出。当你有更短的路时,为什么要花更长的时间呢?

答案3

OR 和 AND 运算符遵循布尔逻辑。

对于原语 A = -name '*.c'、 B = -name '*.cpp'、 C =-print我们有以下方程

你的第一个例子:(A+B).C

你的第二个例子:(AC)+(BC)

它们具有简单的数学等价性,即它们是相同的。但第一个更短、更简洁。

相关内容