如何在多个 PHP 文件中搜索文本字符串?

如何在多个 PHP 文件中搜索文本字符串?

长话短说,我有一个包含近 800,000 个 php 文件的文件夹。我想在每个文件中搜索一个字符串,如果该字符串存在于该文件中,则将该文件复制到另一个目录。

从终端可以做到这一点吗?

到目前为止我得到:

grep -i -n -r'ppr-1792'*|cp $1 移动到此处

但这显然不起作用。$1 需要是包含匹配文本的文件名。

我应该怎么办?

答案1

您可以使用 for 循环并测试 grep 的返回码,或者使用grep -c(计数匹配)并查看匹配计数是否大于 1。

例如

for i in *
do
    grep -i -n 'Power' "$i"

    if [ "$?" -eq 0 ]
    then
            cp "$i" mvd
    fi
done

答案2

您可以使用一行代码轻松完成此操作:

grep -l -i -r -Z pattern | xargs -0 -I source cp source /target

一些注释说明了它的工作原理。如果文件中有匹配项,Grep 的 -l 选项将仅打印文件名,因此它会生成要复制的文件列表。Xargs 命令为每个复制命令构造一个命令并执行它。Xargs 将名为“source”的参数替换为从标准输入读取的文件名。文件名中的空格和其他奇怪的字符由 -Z 和 -0 选项处理。

相关内容