Как я могу использовать задачу Ant tar и сохранить права доступа к файлам? - PullRequest
10 голосов
/ 05 октября 2009

Конечно, это можно сделать с помощью exec task, но мой вопрос:

Возможно ли это сделать с помощью задачи tar?

Ответы [ 3 ]

13 голосов
/ 05 октября 2009

Я не думаю, что есть способ сохранить существующие разрешения, согласно этой заметке из задачи копирования :

Примечание для Unix: Права на файлы не сохраняются при копировании файлов; вместо этого они получают стандартные разрешения UMASK. Это вызвано отсутствием каких-либо средств для запроса или установки прав доступа к файлам в текущих средах выполнения Java. Если вам нужна функция копирования с сохранением прав доступа, используйте <exec executable="cp" ... >.

Однако задача tar может содержать один или несколько элементов tarfileset. tarfileset может быть определен с атрибутом filemode и / или dirmode для указания разрешений Unix. Если указать несколько включений, соответствующих только этим файлам, чтобы получить каждый набор необходимых разрешений, файлы в этом наборе будут включены с этими разрешениями.

12 голосов
/ 14 сентября 2010

Это отсутствие разрешения делает задачу ant tar для меня практически бесполезной. Невозможно сделать это без выполнения tar операционной системы с помощью 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>

Существуют бинарные файлы gnu tar для почти всех операционных систем, известных человеку. Поместите один из них в вашу систему контроля версий и используйте его в зависимости от вашей операционной системы. Да, Ant нужно будет обрабатывать каждый раз при запуске.

8 голосов
/ 15 января 2014

Использование 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) для пользователя и группы.

Надеюсь, это кому-нибудь поможет.

...