开发者

Preserve file permissions when unzipping and the zipping files using ant

I'm writing an ant build.xml file which does the following:

  • Takes a zipped folder (.zip)
  • Unzips it
  • Adds a number of files
  • Zips up the resulting files

An extract of the code from build.xml:

<!-- Unzip SDK to a temporary directory -->
<unzip src="${zipFile}" dest="tmp"/>

<!-- pull in the files from another directory -->
<copy todir="tmp/someDirectory" >
  <fileset dir="${addedFiles}" />
</copy>

<!-- Zip up modified SDK -->
<zip destfile="${destDir}" basedir="tmp"/>

This all works perfectly, except that the permissions set for the zipped files prior to running the ant build are lost in the zip file created by the ant build. For example, files which were previously executable no longer are.

So my question: is it possible to use ant to add files to a zip archive without destroying the permissions of t开发者_StackOverflowhe already present files?

I'm using Ant 1.7.1


I encountered same issue when using Ant unzip target:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" />

The permission of shell scripts inside the zip file was lost when using the unzip target above.

After some investigation, I use the follow 'exec' ant target with unzip command line parameters, it worked.

<!-- Use command line unzip to keep file permissions -->
<exec executable="unzip" spawn="true">
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" />
</exec>

I hope this can help someone else when encountering this kind of issues.

Thanks, J


You can't get the zip task to preserve file permissions, but you can set them explicitly:

<zip destfile="installer.zip" >
<zipfileset filemode="755" dir="../" includes="artisan/install.*" />
</zip>

(This worked for me on Windows and OSX)


Turns out that ant will destroy all information on permissions when unzipping due to a restriction in Java. However, what is possible is to add files to an existing zip file which preserves the permissions of the existing files:

<!-- Add to zip -->
<zip destfile="${existingZipFiledirectory}.zip"
   basedir="${directoryOfFilesToAdd}"
   update="true"
/>

The above script will update the zip file specified with the content in basedir, preserving file permissions in the original zip.


As far as I know, this feature (preserve0permissions) was introduced with Ant 1.8. Previous versions of Ant did not kept the permissions.

If you're stuck with Ant 1.7.1, you can use Tar that -if I'm not mistaken- stores the permissions.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜