Unix find命令:有条件地删除包含匹配文件的任何目录的子目录

Unix find命令:有条件地删除包含匹配文件的任何目录的子目录,unix,find,pattern-matching,conditional,subdirectory,Unix,Find,Pattern Matching,Conditional,Subdirectory,我想在目录树中搜索与特定模式匹配的常规文件,例如 find -regex '.*\.\(expect\|missing\|ok\)' 这很好,但在我的应用程序中效率很低——因为如果一个目录至少包含一个匹配的文件,那么就不需要搜索它的子目录(很多、很深、文件很多),因为它们肯定不包含任何匹配项 那么,只有在父目录中找到匹配的文件时,我如何-prune子目录呢 例如,如果我有以下树: ./a/file.ok ./a/a1/ ./a/a2/ ./b/file.missing ./b/file.exp

我想在目录树中搜索与特定模式匹配的常规文件,例如

find -regex '.*\.\(expect\|missing\|ok\)'
这很好,但在我的应用程序中效率很低——因为如果一个目录至少包含一个匹配的文件,那么就不需要搜索它的子目录(很多、很深、文件很多),因为它们肯定不包含任何匹配项

那么,只有在父目录中找到匹配的文件时,我如何
-prune
子目录呢

例如,如果我有以下树:

./a/file.ok
./a/a1/
./a/a2/
./b/file.missing
./b/file.expect
./b/b1/
./b/b2/
./c/c1/
./c/c1/c11/
./c/c1/c11/foo.expect
./c/c1/c11/foo.txt
那么我只想打印:

./a/file.ok
./b/file.missing
./b/file.expect
./c/c1/c11/foo.expect
没有实际搜索/遍历
a/
b/
的所有子目录树

(这接近我想要的,但还没有真正得到回答。)