find 查找文件,如何排除一些目录或者文件

直接给出一个命令,这个命令首先是通过find进行查找文件,然后从匹配的文件中,找特定的字符串。

find . \( -path "*wp-content/upgrade/*" -prune -o  -path "*wp-content/themes/*" \)  -iname "*.php" -print | xargs grep "xxxxcdn"

可以不用括号

 find .  -path "*wp-content/upgrade/*" -prune -o  -path "*wp-content/themes/*"   -iname "*.php" -print | xargs grep "xxxxcdn"

两者最终执行的结果是等价的。

这个find命令的作用是什么?

一个朋友的网站出现了一点问题,排查后,发现原因是使用第三方的cdn导致的,所以需要排除,网站上那些模板文件有cdn的链接。

  1. -path "*wp-content/themes/*" 表示需要查找的文件在 themes 目录下
  2. -path "*wp-content/upgrade/*" -prune 表示要排除这个目录
  3. -o 表示 或者。
  4. -iname 不区分大小写

为什么使用 -print

find 对 默认对逻辑判断为真的都是会执行 -print , 通过 添加 -print 最终输出后者

做个比较

find .  -path "*wp-content/upgrade/*" -prune -o  -path "*wp-content/themes/*"    -iname "header.php"
find .  -path "*wp-content/upgrade/*" -prune -o  -path "*wp-content/themes/*"  -iname "header.php"  -print

第一条命令比第二条输出的内容一般会多,比如在本机上多的是

wp-content/upgrade/wordpress-5.9.1-tCg8IK

因为 -o 表示或者,所以 wp-content/upgrade/wordpress-5.9.1-tCgI 满足逻辑判断