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

时间:2011-09-30 12:26:18

标签: 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 /mylibs -type f -iname "*.php" -ok php -l {} &>/dev/null ; echo $? \;

但这只是在终端上打印1并且不要求确认(-ok与交互式确认后的-exec相同)

我在这里做错了什么?是不是可以这样做?

2 个答案:

答案 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")}'