有没有可能让Ant为几个文件(包括子目录)生成一个.md5文件,从而产生一个包含多行的md5文件(每行都包含一个校验和以及文件名和它的相对路径)?
在过去,我只对单个文件使用Ant校验和任务:
<checksum algorithm="md5" format="MD5SUM" file="${distFile}">我最近尝试了一下:
<checksum algorithm="md5" format="MD5SUM">
<fileset dir="." />
</checksum>但是上面的Ant任务为列出的每个文件生成一个.md5文件。
我的目标是只有一个.md5文件,其中有多行包含校验和和文件名(具有相对路径)。
非常感谢你的帮助!
发布于 2015-06-16 04:13:39
您可以使用校验和任务为每个文件创建校验和文件,然后使用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>发布于 2015-02-08 19:06:58
根据Mark对原始问题的评论,我设法将以下ant脚本组合在一起(请注意,至少需要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>此脚本迭代(for) dist目录中的路径/文件集(所有分发文件,因此文件已准备好部署),并使用<checksum../>任务计算每个文件的校验和,将MD5散列写入md5。
请注意,通过<local... />任务将md5和relativeFile设置为“本地”非常重要,这样就可以在该for循环中重新设置该属性。
<property name="relativeFile"... />任务根据我的dist目录(${dist})将绝对文件路径(@{file})转换为相对路径。
最后,<echo... />任务将md5散列和md5格式的文件名写入/附加到"checksums.md5“文件(请注意,您的脚本应该在for循环之前删除该文件,因为echo确实附加了新条目(append="true")。
代码的缩进是正确的:最后的</echo>必须是“深度0”缩进,这样就不会有空格或制表符写入输出文件。
https://stackoverflow.com/questions/28384784
复制相似问题