Bash 使用exec查找:如何对每个文件执行多步骤条件操作

Bash 使用exec查找:如何对每个文件执行多步骤条件操作,bash,find,exec,Bash,Find,Exec,我在目录结构中有很多php文件,比如/mylibs 我想在每个php文件上运行一个简单的php-l$file,检查语法错误 find /mylibs -type f -iname "*.php" -exec php -l {} &>/dev/null \; 这是第一步,&>/dev/null从php中获取详细的输出(是否发现语法错误) php-l返回0,如果没有发现任何错误,根据哪个,我想将它们复制到其他目录,比如/mybin。为了检查这是否如预期的那样有效,我尝试了 find

我在目录结构中有很多php文件,比如/mylibs
我想在每个php文件上运行一个简单的
php-l$file
,检查语法错误

find /mylibs -type f -iname "*.php" -exec php -l {} &>/dev/null \;
这是第一步,&>/dev/null从php中获取详细的输出(是否发现语法错误)

php-l
返回0,如果没有发现任何错误,根据哪个,我想将它们复制到其他目录,比如
/mybin
。为了检查这是否如预期的那样有效,我尝试了

find /mylibs -type f -iname "*.php" -ok php -l {} &>/dev/null ; echo $? \;
但这只是在终端上打印1,并不要求确认(-ok与交互确认后的-exec相同)

我做错了什么?无法执行此操作吗?

您可以使用:

这对你有用吗

 find ....|xargs awk '{r=system("php -l "$0" &>/dev/null"); if(!r) system("cp "$0" /path/to/targetDir")}'

我确实找到了-键入f-follow-name“*.php”| xargs awk'{r=system(“php-l“$0”和>/dev/null”);if(!r)system(“echo”$0”)}和我得到
awk:line 1:runawe string constant”)。
我非常喜欢你的awk魔术:D我们只需要让它工作:)你评论中的awk行有问题。系统(“echo”$0
[不带“此处”
)或简单地
php-l“$path”&>/dev/null&&cp“$path”/mybin
不带丑陋的
if
 find ....|xargs awk '{r=system("php -l "$0" &>/dev/null"); if(!r) system("cp "$0" /path/to/targetDir")}'