11

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

是否可以使用 tar 任务来做到这一点?

4

3 回答 3

15

根据复制任务中的此注释,我认为没有办法保留现有权限:

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

但是tar 任务可以采用一个或多个tarfileset元素。tarfileset可以使用 and/or 属性定义以filemode指定dirmodeunix 权限。如果您指定多个包含仅匹配那些文件以获取每组所需权限,则该组中的文件将包含在这些权限中。

于 2009-10-04T21:11:16.823 回答
14

这种缺乏权限使 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 每次运行时都需要派生一个进程。

于 2010-09-14T19:25:42.990 回答
8

使用 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)。

希望这可以帮助某人。

于 2014-01-15T14:41:42.030 回答