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的链接。
- -path "*wp-content/themes/*" 表示需要查找的文件在 themes 目录下
- -path "*wp-content/upgrade/*" -prune 表示要排除这个目录
- -o 表示 或者。
- -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 满足逻辑判断