Linux 在命令行(Shell)上查找具有特定变量声明(字符串搜索)的.php文件

Linux 在命令行(Shell)上查找具有特定变量声明(字符串搜索)的.php文件,linux,file,centos,command-line-interface,devops,Linux,File,Centos,Command Line Interface,Devops,我正在尝试查找目录中特定深度的所有.PHP文件(至少向下4级,但在中不超过5级) 我通过shell以root权限登录到Centos服务器 我要搜索的字符串是: $slides=''; 我面前的东西。。我希望它能起作用。我试图用\(我想也许它像regex一样工作,不需要特殊字符)来逃避$。我尝试不使用=''部分,或者尝试将\'\'\'添加到该部分。。或者删除=''以简化。没什么 find . -maxdepth 5 -mindepth 4 -type f -name ‘*.php’ -print

我正在尝试查找目录中特定深度的所有.PHP文件(至少向下4级,但在中不超过5级)

我通过shell以root权限登录到Centos服务器

我要搜索的字符串是:

$slides='';
我面前的东西。。我希望它能起作用。我试图用\(我想也许它像regex一样工作,不需要特殊字符)来逃避$。我尝试不使用
=''
部分,或者尝试将
\'\'\'
添加到该部分。。或者删除
=''
以简化。没什么

find . -maxdepth 5 -mindepth 4 -type f -name ‘*.php’ -print  | xargs grep "\$slides=’’" *
我已经在我想要递归搜索的目录下运行了它

另外-我有只查找*.php的过滤器,但我仍然在返回的目录中得到一堆目录名,并带有一条警告,上面写着
grep:[dir\u name]:是一个目录


很明显,就grep命令的语法而言,我在这里遗漏了一些东西,或者过滤器在这里是如何工作的。我在PHP中更多地使用grep,所以这对我来说是一个很大的转变

如果您想从PHP代码中使用shell_exec,它是一个程序执行函数,允许您在操作系统shell中运行类似“ls-al”的命令,并将结果返回到变量中。querystring不是可以这样使用的命令

您的意思是从命令行运行PHP,以便它从shell而不是web服务器运行:

php-r'echo“hello world\n”;'
如果运行PHP4.3及更高版本,则可以使用PHP命令行界面(CLI),该界面还可以执行存储在文件中的脚本。看看下面的语法和示例:

,您几乎是对的。问题似乎出在命令的
grep
部分

grep "\$slides=''" *
也就是说,
*
就是问题所在。从

在分词之后,除非设置了-f选项(请参见集合 内置),Bash扫描每个单词中的字符“*”、“?”和“[”。 如果出现这些字符中的一个且未被引用,则该单词 被视为模式,并替换为按字母顺序排序的 与模式匹配的文件名列表

当您使用
find
将找到的文件导入
xargs
并尝试使用
*
对它们进行
grep
时,
grep
会将此解释为您希望在glob
*
返回的文件名/目录列表中找到字符串
$slides='
,而您不能
grep
>没有向
grep
提供
-r
标志的目录,因此它返回了一个错误

相反,您要做的是使用
find
将找到的文件导入
xargs
中,这样它就可以将文件名列表添加到
grep
命令中,就像
xargs
所做的那样

xargs从标准输入中读取项目,以空格分隔(其中 可以使用双引号或单引号或反斜杠进行保护)或 换行,并执行一个或多个命令(默认为/bin/echo) 任何初始参数后跟从中读取的项的时间 标准输入。忽略标准输入上的空行

发出正确的命令

find . -maxdepth 5 -mindepth 4 -type f -name '*.php' -print0  | xargs -0 grep "\$slides=''"

使用
find
中的
-print0
标志和
xargs
中的
-0
标志作为分隔符,以防任何文件名包含换行符。

我正在从CLI(shell)运行使用root访问。不希望从PHP启用shell命令,安全方面更愿意不让这种情况发生。上面也明显是shell命令,而不是PHP。尝试
find.-maxdepth 5-mindepth 4-type f-name'*.PHP'-print0 | xargs-0 grep“\$slides=”
find.-maxdepth 5-mindepth 4-type f-name'*.PHP'-exec grep“\$slides=”{}\”
哇,你的第一张幻灯片真是太棒了。我得用谷歌搜索更多,看看你放在那里的其他物品有什么用!谢谢!!!