Linux 在命令行(Shell)上查找具有特定变量声明(字符串搜索)的.php文件
我正在尝试查找目录中特定深度的所有.PHP文件(至少向下4级,但在中不超过5级) 我通过shell以root权限登录到Centos服务器 我要搜索的字符串是: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
$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=”{}\”
哇,你的第一张幻灯片真是太棒了。我得用谷歌搜索更多,看看你放在那里的其他物品有什么用!谢谢!!!