我有一个zip文件,分别是包含某些文件的目录。从zip文件中,我想仅提取目录中存在的那些文件(在提取文件时在文件上执行文件名转换。.基本上,我正在对这些文件进行备份)。

做类似的事情没有问题u003Ccopy>它的文件集带有一个u003Cpresent>元素,但似乎对我没有拉链并不适合我:

<unzip src="${cur.srcdir.live}" dest="${cur.srcdir.archive-files.dir}" overwrite="true">
    <fileset dir=".">
        <present present="both" targetdir="${cur.srcdir}" />
        <type type="file" />
    </fileset>
    <globmapper from="*" to="*.${backup.suffix}" />
</unzip>

有人做过这样的事情吗?这是ANT 1.8.0。谢谢!

有帮助吗?

解决方案

我能够通过“伪造”来解决我的问题u003Cpresent>可以使用的选择器u003Ccopy>。就是这样:

首先,我使用PathConvert创建文件夹中的文件列表:

    <pathconvert property="extract.list" pathsep="&#xA;">
        <path>
            <fileset dir="${extract.src.dir}" includes="${extract.src.dir.relpath}">
                <type type="file" />
            </fileset>
        </path>
        <map from="${extract.src.dir}\" to="" />
    </pathconvert>

请注意,地图的用户将列表为相对路径而不是绝对路径。另外,定界符是新线。

然后,此列表被写入文件:

    <echo file="${props.tmp.file}" message="~~~~noop~~~~&#xA;${extract.list}" append="false" />

我将“ Nooop”条目放在其中,以便该文件始终具有至少一行。这很重要,因为我们下一步将其用作包含的file。如果includefile是空的,则将蚂蚁解释为“允许任何东西” ...但是我们要确保空列表从邮政编码中提取任何东西。

最后一步是使用上面的临时文件从zip中提取作为包含文件。 GlobMapper提取时将文件重命名为适当的备份名称:

    <unzip src="${extract.archive}" dest="${extract.dest.dir}" overwrite="true">
        <patternset>
            <includesfile name="${props.tmp.file}" />
        </patternset>
        <globmapper from="*" to="*.${backup.suffix}" />
    </unzip>

其他提示

您可以尝试通过 执行 任务。
我在窗口上检查的示例刷新仅更改了文件 dest.folder:

<property name="zip.file_name" value="Archive.zip"/>
<property name="src.folder" value="d:\"/>
<property name="dest.folder" value="d:\55"/>

<target name="unzip">
    <echo>unzip -fo ${src.folder}${zip.file_name}</echo>
    <exec dir="${dest.folder}" executable="cmd.exe" output="${src.folder}operation_result.txt">

        <arg line="/c unzip -fo ${src.folder}${zip.file_name}"/>
    </exec>
</target>

如果要保持原始文件,则可以使用此命令:

<arg line="/c unzip -foB ${src.folder}${zip.file_name}"/>

如果使用 -B 参数您的原始文件(存储在文件夹中)将被重命名 - 将附加Tilde符号。您会得到两组文件 - 从存档和旧的原始文件中提取。
之后,您可以在 move 任务。

如果有人需要更改提取目录结构,请在此处添加此内容。我花了很多时间尝试使它起作用。蚂蚁解压缩任务接受 cutdirsmapper.

<unzip dest="${build.dir}/packages">
    <fileset dir="${src.dir}/packages" includes="*.pkg" />
    <!-- Exctract build folder contents also moving one level up. -->       
    <cutdirsmapper dirs="1" />
    <patternset>
        <include name="build/" />
    </patternset>
</unzip>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top