我有几个zip文件需要在Ant目标中解压缩。所有zip文件都在同一目录中,并具有相同的内部目录和文件结构。
所以我使用以下代码片段解压缩目录中的所有zip文件,但每个zip文件在根目录下不包含父文件夹,因此每个连续的zip文件都被解压缩并覆盖以前的文件。
<unzip dest="C:/Program Files/Samsung/Samsung TV Apps SDK/Apps">
<fileset dir=".">
<include name="**/*.zip"/>
</fileset>
</unzip>
是否有更好的方法来解压缩一组文件,并创建一个目录以将其解压缩到基于zip文件名的目录?
所以,如果zip文件是:
1.zip
2.zip
3.zip
然后将每个内容提取到:
1/
2/
3/
由于
答案 0 :(得分:4)
一种解决方案可能是使用ant-contrib'用于'和'propertyregex'任务来执行此操作:
<for param="my.zip">
<fileset dir="." includes="**/*.zip" />
<sequential>
<propertyregex property="my.zip.dir"
input="@{my.zip}"
regexp="(.*)\..*"
select="\1"
override="yes" />
<unzip src="@{my.zip}" dest="${my.zip.dir}" />
</sequential>
</for>
'propertyregex'从zip文件名中删除.zip
扩展名,以用作目标目录名。
答案 1 :(得分:-1)
没有ant-contrib: https://stackoverflow.com/a/12169523/957081
<!-- Get the path of the war file. I know the file name pattern in this case -->
<path id="warFilePath">
<fileset dir="./tomcat/webapps/">
<include name="myApp-*.war"/>
</fileset>
</path>
<property name="warFile" refid="warFilePath" />
<!-- Get file name without extension -->
<basename property="warFilename" file="${warFile}" suffix=".war" />
<!-- Create directory with the same name as the war file name -->
<mkdir dir="./tomcat/webapps/${warFilename}" />
<!-- unzip war file -->
<unwar dest="./tomcat/webapps/${warFilename}">
<fileset dir="./tomcat/webapps/">
<include name="${warFilename}.war"/>
</fileset>
</unwar>