Ant UNZIP 没有覆盖

No overwrite on Ant UNZIP

我想解压缩一个文件,但是如果某个文件存在,则不能替换它。

我试过这个:

<unzip src="compress.zip" dest="dirTo" overwrite="false">
<patternset>
    <include name="dirFrom/**"/>
</patternset>

"dirFrom",是压缩文件中我要解压的目录的名称。我使用 "overwrite" 来设置错误,但它不起作用,它会覆盖。

我有一个目录,它有不同的子目录。我想要那些子目录之一,以及它的文件和子目录。

overwrite设置为false只会防止覆盖比源文件新的目标文件。对于更复杂的过滤,您必须使用带有 zipfilsetcopy 任务,如 ant 文档中所述(请参阅 unzip 任务——在 Related tasks 部分)。例如,如果目标目录中已经存在以下代码,则不应从 zip 文件中提取文件(考虑源目录布局):

<copy todir="${target.dir}">
    <zipfileset src="${zip.file}">
        <patternset>
            <include name="**/*.*"/>
        </patternset>
        <present targetdir="${target.dir}" present="srconly"/>
    </zipfileset>
</copy>

我找到了方法。

1st,我把所有的东西都解压到auxiliary目录。 第二,我做了一个循环,逐个文件比较文件,如果该文件存在的话。 3、如果文件不存在,我复制它。

    <unzip src="compressFile.zip" dest="dirAux">
    <patternset>
        <include name="mySubDir/**"/>
    </patternset>
</unzip>

<fileset id="fileset1" dir="dirAux/mySubDir" />
<property name="newContentMySubDir" refid="fileset1"/>

<for param="nameFile" list="${newContentMySubDir}" delimiter=";">
    <sequential>

        <if>
            <not><available file="${finalDir}/mySubDir/@{nameFile}" type="file"/></not>
            <then>
                <copy tofile="${finalDir}/mySubDir/@{nameFile}" file="dirAux/mySubDir/@{nameFile}"/>
            </then>
        </if>

    </sequential>
</for>