如何使用 or 查找并执行

如何使用 or 查找并执行

我正在尝试查找带有*.c*.h扩展名的文件。我使用以下命令

find "$path" -type f -iname "*.c" -o -iname "*.h" -exec ls {} \;

这仅执行 ls*.h匹配项。我试过-o -iname *.c -o -iname *.h同样的事情发生。我想在 c 和 h 文件上执行?

答案1

您需要对不相交的子句进行分组:

find "$path" -type f \( -iname "*.c" -o -iname "*.h" \) -exec ls {} \;

如果没有它,find您的命令将解释为两组不相交的子句:-type f -iname "*.c"一方面,另一方面-iname "*.h" -exec ls {} \;。这就是为什么您只能看到*.h匹配项。

ls顺便说一句,这样跑步并没有什么意义。你不妨使用

find "$path" -type f \( -iname "*.c" -o -iname "*.h" \) -print

(但也许ls是一个占位符)。

您还可以通过组合两个 glob 来简化命令:

find "$path" -type f -iname "*.[ch]"

(依赖于默认-print操作)。

相关内容