如何在find中排除目录。 命令
我试图为所有JavaScript文件运行find命令,但是如何排除特定目录?
这是我们使用的查找代码。
for file in $(find . -name '*.js'); do java -jar config/yuicompressor-2.4.2.jar --type js $file -o $file; done
  例如,如果您想排除misc目录,只需将-path ./misc -prune -o添加到find命令中,请使用prune开关: 
find . -path ./misc -prune -o -name '*.txt' -print
以下是多个目录的示例:
find . -type d ( -path dir1 -o -path dir2 -o -path dir3 ) -prune -o -print
  在这里,我们排除DIR1,DIR2和DIR3,因为在find表达它是一个动作,作用于标准-path dir1 -o -path dir2 -o -path dir3 (如果DIR1或DIR2或DIR3),相与type -d 。  进一步的行动是-o print ,只是打印。 
如果-prune不适合你,这将会: 
find -name "*.js" -not -path "./directory/*"
我发现以下比其他建议的解决方案更容易推理:
find build -not ( -path build/external -prune ) -name *.js
这来自一个实际的用例,我需要在wintersmith生成的一些文件上调用yui-compressor,但是忽略了需要按原样发送的其他文件。
  Inside (和)是一个完全匹配build/external的表达式,并且在成功时避免遍历下面的任何东西。  然后将它分组为带有转义括号的单个表达式,并以-not为前缀,这将使find跳过与该表达式匹配的任何内容。 
  有人可能会问,如果添加-not不会使-prune隐藏的所有其他文件重新出现,并且答案是否定的。  -prune工作方式是,任何一旦到达该目录下的文件都会被永久忽略。 
这也很容易扩展以增加额外的排除。 例如:
find build -not ( -path build/external -prune ) -not ( -path build/blog -prune ) -name *.js
