检查phing中是否存在文件类型


Checking for existence of a file type in phing

我正在用php编写一个构建脚本,并希望有一个if语句来测试目录中是否存在具有给定扩展名的任何文件。在本例中是SQL文件)。我曾尝试对<available>执行此操作,如下所示,但运气不好(<then>从未执行过)。有人有什么想法吗?

<if>
     <available file="${build.pendingsql}/*" type="file" extension="sql"  />
     <then>
         <!-- Do stuff -->
     </then>
</if>

您可以这样做(根据您的具体需要进行调整,ls在当前目录中运行):

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="check">
    <target name="check">
        <exec checkreturn="true" command="ls *.sql" outputProperty="list"/>
        <if>
            <equals arg1="${list}" arg2="" />
            <then>
                <echo msg="not found"/>
            </then>
            <else>
                <echo msg="found ${list}"/>
            </else>
        </if>
    </target>
</project>

在我的mac上,我最终使用了以下内容:

<!-- Are there sql files in pending -->
<exec checkreturn="false" dir="${build.pendingsql}" command="ls *.sql" outputProperty="list"/>
<echo msg="${list}"/>
<if>
    <equals arg1="${list}" arg2="ls: *.sql: No such file or directory" />
    <then>
        <echo msg="No SQL patches found"/>
    </then>
    <else>
        <echo msg="SQL patches found"/>
    </else>
</if>

Bolek发布的解决方案的主要变化是checkreturn需要为false以解释ls退出>0并将equals测试更改为"ls: *"。sql:没有这样的文件或目录。我意识到这有点黑客化,可能会中断(基于语言/系统输出不同的"No such.."消息),但它适用于我。