find查找文件的时候排除某个或几个文件或目录使用笔记
#注意:路径后面不要带/,否则会过滤失败,同时对路径的过滤一定是第一个选项,其他选项在-o 以及 -a -print之间即可,注意逻辑表达式哦!
find ./ \( -path './aos-mysql' -o -path './thirdparty' \) -a -prune -o -type f -a -print |grep -Ev '\.(wf|debug|sql|back|bak|sock)' |xargs grep 'localhost'| wc -l
#下面的写法不能过滤,因为指定直接路径的话就不能匹配到相当路径了,其对路径是通过直接字符串匹配的,而不会求绝对路径
find /home/work \( -path './aos-mysql' -o -path './thirdparty' \) -a -prune -o -type f -a -print |grep -Ev '\.(wf|debug|sql|back|bak|sock)' |xargs grep 'localhost'| wc -l
#下面的写法不能过滤,因为如果-type f不成立的话则不会执行 -path './aos-mysql' -a -prune,直接执行了 -print
find ./ -type f -path './aos-mysql' -a -prune -o -print |grep -Ev '\.(wf|debug|sql|back|bak|sock)' |xargs grep 'localhost'| wc -l
#下面的写法也不会正确执行,原因是路径 './aos-mysql/'后面多加了'/',至于路径是否需要引号括起来都不是很要紧
find ./ \( -path './aos-mysql/' -o -path './thirdparty/' \) -a -prune -o -print -type f |grep -Ev '\.(wf|debug|sql|back|bak|sock)' |xargs grep 'localhost'| grep -Ev 'Binary file' |wc -l