尝试从查找中排除一组目录让我抓狂!我想要做的是查找目录树中的所有 .java 文件,但忽略测试目录中的所有文件。因此,我尝试过:
find . -name "*.java" -not -path "test"
和
find . -name "*.java" -path "test" -prune
以及其中的几种变体。但是 - 根据变体 - 我要么获得所有 java 文件(包括测试目录中的文件),要么一个都没有。我查看了 SU 上的其他问题(例如这个和这个),但它们要么没有解决我的情况,要么我忽略了一些东西。
我正在使用 gnu find 4.2.27(fwiw,在 centos 5.5 上,使用 gnu bash 3.2.25)。
编辑:抱歉,我应该最初指定我需要做一个
-exec grep blah {} \;
因此在这种情况下,通过 grep -v 管道对我来说不起作用。
答案1
这应该有效:
find -path '*/test/*' -prune -o -name '*.java' -exec grep blah {} \;
答案2
综合上述提示,这将递归搜索 PHP 文件但排除几个目录,然后将它们压缩起来。
查找 -name locallibs -prune -o -name libs -prune -o -name wiki -prune -o -name tmp -prune -o -name '*.php' -exec zip all.zip {} \;