find命令 如何排除某个目录

find . -path ./src/emacs -prune -o -print  

-a -o和 && || 一样都有短路性;

实际可以理解为这样(find condition1 && -prune || -print) find . -path ./src/emacs -a -prune -o -print, 如果find . -path ./src/emacs返回真(就是找到的内容匹配),那接着执行-prune进行忽略处理,由于短路原因跳过-print; 如果find . -path ./src/emacs返回假(就是说找到的内容不匹配),由于短路原因就会跳过-prune来执行-print,打印出这些不匹配的内容;

以此类推,不满足条件1,2,3而满足条件4的语句就该是这样的:

find condition1 -prune -o condition2 -prune -o condition3 -prune -o condition4 -print


应用举例:

红色部分作用是排除.repo .git目录,绿色部分作用是限制找到的文件后缀必须是.c/.cc/.cpp/.h,蓝色作用是将输出的结果的间隔符号换成‘\0'(以便处理文件名称中包含空格的情况),紫色部分将结果作为grep的输入(-0代表以’\0'作为间隔符),最后grep找到参数中要求的字符并且用颜色标记,加上行号。

  1. function cgrep()  
  2. {  
  3.     find . -name .repo -prune -o -name .git -prune -o -type f  name.coname.cconame.cpponame.h  -print0 | xargs -0 grep --color -n "$@"  

你可能感兴趣的:(find命令 如何排除某个目录)