如何使用Ant tar任务并保留文件权限?

时间:2009-10-04 20:28:11

标签: ant file-permissions tar

当然可以使用exec task完成,但我的问题是:

是否可以使用tar任务执行此操作?

3 个答案:

答案 0 :(得分:13)

根据copy task的说明,我认为没有办法保留现有权限:

  

Unix注意:复制文件时不保留文件权限;他们最终使用默认的UMASK权限。这是由于缺乏在当前Java运行时中查询或设置文件权限的任何方法。如果您需要保留权限的复制功能,请改用<exec executable="cp" ... >

tar task可以使用一个或多个tarfileset元素。可以使用tarfileset和/或filemode属性定义dirmode以指定unix权限。如果指定多个包含仅匹配这些文件以获取每组所需权限,则该组中的文件将包含在这些权限中。

答案 1 :(得分:12)

这种缺乏权限使得ant tar任务对我来说几乎无用。如果没有使用 exec任务执行操作系统tar,则无法执行此操作:

    <exec executable="tar" output="/dev/null" os="Linux">
        <arg value="--exclude-from=files_to_exclude.txt"/>
        <arg value="-cvz"/>
        <arg value="--file=${file.tar}"/>
        <arg value="."/>
    </exec>

对于人类已知的几乎所有操作系统,都有gnu tar二进制文件。将其中一个放入您的版本控制系统中,并根据您的操作系统使用它。是的,Ant每次运行时都需要分叉一个进程。

答案 2 :(得分:7)

使用tarfileset为我们的项目工作。这是一个工作示例,以防有人需要它:

    <tar destfile="${dist}/${module.name}-${version}.tar">
        <tarfileset dir="${package.dir}" filemode="550" includesfile="${home.dir}/includelist.txt">
            <include name="*.sh"/>
        </tarfileset>
    </tar>

在此示例中,includelist.txt用于指示要包含在tar文件中的文件。所有带有* .sh扩展名的文件都具有用户和组的读取和执行权限(550)。

希望这有助于某人。