Linux Zip命令打包含完整目录结构问题(Bamboo+ANT环境)
解决Zip打包时包含完整上级目录结构的问题
我明白你遇到的麻烦了——用Ant调用Linux的zip命令打包release文件夹,结果压缩包里带了一长串绝对路径,而用-j参数又因为子目录里的同名文件冲突失败。别担心,这两个方案能完美解决你的问题:
方案1:切换到release的上级目录执行zip命令
问题的核心在于你用了绝对路径指定要打包的目录,zip默认会保留整个路径结构。我们可以调整Ant的exec任务,把工作目录切换到release文件夹的上级目录(也就是你的${basedir}/tmp),然后用相对路径指定要打包的release目录,这样压缩包里就只会保留release本身的结构,不会带那些多余的上级路径。
修改后的Ant代码如下:
<exec executable="/usr/bin/zip" dir="${basedir}/tmp" failonerror="true"> <arg line="-r release.zip release -P PASSWORD_GOES_HERE" /> </exec>
如果需要把压缩包输出到指定的绝对路径(比如原来的/var/.../release.zip),可以把目标路径写成绝对路径:
<exec executable="/usr/bin/zip" dir="${basedir}/tmp" failonerror="true"> <arg line="-r /var/...more directories.../repo/master/ProjectBuild/tmp/release.zip release -P PASSWORD_GOES_HERE" /> </exec>
方案2:使用zip的-C参数切换目录
如果你不想修改exec的dir属性,也可以用zip自带的-C参数,它能让zip先切换到指定目录,再执行打包操作,效果和方案1一样。
对应的Ant代码:
<exec executable="/usr/bin/zip" dir="${basedir}/tmp" failonerror="true"> <arg line="-r /var/...more directories.../repo/master/ProjectBuild/tmp/release.zip -C /var/...more directories.../repo/master/ProjectBuild/tmp release -P PASSWORD_GOES_HERE" /> </exec>
这两个方案都不会像-j那样平级打包文件,而是完整保留release文件夹内的子目录结构,自然也就不会出现同名文件冲突的问题了。你可以根据自己的项目结构选一个最顺手的来用~
内容的提问来源于stack exchange,提问作者Krystian Dobkowski
相关产品推荐
相关产品推荐

