我正在尝试查找带有*.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
操作)。