Linux 下使用PHP替换grep

使用PHP替换grep

在服务器上要查一些字符串,用grep命令太慢了,有一些特定目录(比如log)下面文件太多,虽然可以用 -v 排除特殊目录,不过按我的理解,应该是先把结果找出来,再排除特定目录,应该也会把log目录过一遍,所以用php写了一个替代脚本,脚本如下:

//要查找的字符串
$needGrepStrArr = array('secstg','test','console.log');
//需要排除的文件类型
$fileType = array('png','jpg','gif','zip');
/**
* @access public
* @param mixed $arg1 要查找的文件目录
* @return bool
*/
function grep($dir)
{
    if(is_dir($dir)){
        $child_dirs = scandir($dir);
        foreach($child_dirs as $child_dir){
            //排除特定目录
            if($child_dir != '.' && $child_dir != '..' && $child_dir !='logs'){
                if(is_dir($dir.'/'.$child_dir)){
                    grep($dir.'/'.$child_dir);
                }else{
                    $fileName = $dir.'/'.$child_dir;
                    //去除'//'
                    $fileName = str_replace('//','/',$fileName);
                    checkFile($fileName,true);
                }
            }
        }
        return true;
    }else{
        return false;
    }
}
/**
* @access public
* @param mixed $arg1 要检查的文件名
* @param mixed $arg2 大小写是否敏感
* @return bool
*/

function checkFile($fileName,$isUpper=false){
    Global $needGrepStrArr;
    Global $fileType;
    if(file_exists($fileName)){
        if(in_array(pathinfo($fileName,PATHINFO_EXTENSION),$fileType)){
            return;
        }

        $contents = file_get_contents($fileName);
        if($contents){
            foreach($needGrepStrArr as $needGrepStr){
                if($isUpper){
                    $contents = strtoupper($contents);
                    $needGrepStr = strtoupper($needGrepStr);
                }
                if(strstr($contents,$needGrepStr)){
                    echo $needGrepStr .' in '.$fileName.PHP_EOL;
                }
            }
        }
    }
    return true;
}
grep('/var/www/html/ci/');

虽然和grep命令还有一些差距,但是用来查找一些普通字符串也是够用了,如果需要用正则查找的话,把对应的配置方法改成正则就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值