【问题标题】:How can I use the Ant tar task and preserve file permissions?如何使用 Ant tar 任务并保留文件权限?
【发布时间】:2010-12-03 18:57:03
【问题描述】:

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

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

【问题讨论】:

    标签: ant file-permissions tar


    【解决方案1】:

    根据copy task 的此注释,我认为没有办法保留现有权限:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 为什么这被否决了?这个问题的完美解决方案 - 赞成
      • 它很可能被否决了,因为回答者没有阅读问题:“当然可以使用 exec 任务完成”
      • ant tar 完全没用。我理解为什么(java 无法读取文件权限或一些垃圾),但这并不能仅仅因为我想 tar 就重写我的所有权限。这应该是正确的答案。
      • 这不是一个真正的解决方案,仅适用于具有可用 tar 箱的操作系统如果我想能够在任何平台上构建怎么办?
      【解决方案3】:

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

      希望这对某人有所帮助。

      【讨论】:

      • 让我猜猜:ivy + git 存储库?因为这就是让我想到这个问题的原因。
      • 这应该是答案!这是正确的做法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 2011-10-13
      • 2011-03-13
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多