Ant / checksum:如何为多个文件生成一个.md5文件(导致md5文件包含多行)

时间:2015-02-07 16:52:32

标签: java hash ant md5 checksum

是否可以让Ant为包括子目录在内的多个文件生成一个.md5文件,从而生成一个包含多行的md5文件(每行包含校验和以及带有它的文件名的相对路径) ?

过去,我只将Ant校验和任务用于单个文件:

<checksum algorithm="md5" format="MD5SUM" file="${distFile}">

我最近试过这个:

<checksum algorithm="md5" format="MD5SUM">
    <fileset dir="." />
</checksum>

但是上面的Ant任务为每个列出的文件生成一个.md5文件。

我的目标是只有一个包含校验和和文件名(包含相对路径)的多行的.md5文件。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用校验和任务为每个文件创建校验和文件,然后使用concat任务将它们组合到一个文件中。

    <checksum algorithm="SHA-256" fileext=".sha256" format="MD5SUM" todir="${dir.cache}/sha/${version}">
        <fileset dir="${dir.release}" />
    </checksum>
    <concat destfile="${dir.release}/DIGEST.sha256sum">
        <fileset dir="${dir.cache}/sha/${version}" />
    </concat>

答案 1 :(得分:0)

根据Mark对原始问题的评论,我设法将以下蚂蚁脚本放在一起(请注意,需要ant-contrib,至少需要0.6版本):

<for param="file">
    <path>
        <fileset dir="${dist}/." />
    </path>
    <sequential>
        <local name="md5" />
        <local name="relativeFile" />

        <checksum file="@{file}" algorithm="md5" format="MD5SUM" property="md5"/>
        <property name="relativeFile" location="@{file}" basedir="${dist}" relative="true" />
        <echo file="checksums.md5" append="true">${md5} *${relativeFile}
</echo>
    </sequential>
</for>

此脚本在我的dist目录中的路径/文件集上迭代(for)(所有分发文件,以便准备部署的文件)并使用<checksum../>任务计算每个文件的校验和文件,将MD5哈希写入md5

请注意,将md5relativeFile设置为&#34; local&#34;通过<local... />任务,可以在for循环中重新设置属性。

<property name="relativeFile"... />任务根据我的dist目录(@{file})将绝对文件路径(${dist})转换为相对路径。

最后,<echo... />任务将md5哈希和MD5格式的文件名写入&#34; checksums.md5&#34;文件(请注意,您的脚本应该在for循环之前删除该文件,因为echo会附加新条目(append="true")。

代码的缩进是正确的:最后</echo>必须位于&#34;深度0&#34;缩进,因此没有空格或制表符写入输出文件。