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

发布于 2024-08-07 13:34:21 字数 58 浏览 3 评论 0 原文

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

是否可以使用 tar 任务来完成?

Of course it can be done using the exec task, but my question is:

Is it possible to do it using the tar task?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

溺深海 2024-08-14 13:34:21

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

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

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

I don't think there is a way to retain existing permissions, per this note from the copy task:

Unix Note: File permissions are not retained when files are copied; they end up with the default UMASK permissions instead. This is caused by the lack of any means to query or set file permissions in the current Java runtimes. If you need a permission-preserving copy function, use <exec executable="cp" ... > instead.

However the tar task can take one or more tarfileset elements. The tarfileset can be defined with a filemode and/or dirmode attribute to specify the unix permissions. If you specify multiple includes matching only those files to get each set of required permissions, the files in that set will be included with those permissions.

叹倦 2024-08-14 13:34:21

这是不可能的。缺乏许可使得 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 每次运行时都需要派生一个进程。

It is impossible. This lack of permission makes ant tar task almost useless for me. There's no way to do it without executing the operating system tar with the exec task:

    <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>

There are gnu tar binaries for almost all operating systems known to man. Put one of them in your version control system and use it depending in your operating system. Yes, Ant will need to fork a process every time it is run.

烟若柳尘 2024-08-14 13:34:21

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

希望这对某人有帮助。

Using tarfileset worked for our project. Here's a working example in case someone needs it:

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

In this example, includelist.txt is used to tell which files to include in the tar file. All the files with *.sh extension will have Read and Execute permission (550) for the user and the group.

Hope this helps someone.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文