我在目录结构中有一堆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相同)
我在这里做错了什么?是不是可以这样做?
答案 0 :(得分:1)
您可以使用while
loop:
find /mylibs -type f -iname "*.php" | while IFS= read -r path
do
php -l "$path" &>/dev/null
if [ $? -eq 0 ]
then
cp "$path" /mybin
fi
done
答案 1 :(得分:0)
这对你有用吗?
find ....|xargs awk '{r=system("php -l "$0" &>/dev/null"); if(!r) system("cp "$0" /path/to/targetDir")}'