12

Я наблюдаю следующее поведение с tar 1.26 и 1.27.1:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b -xvf test.tar diffowner
diffowner/
diffowner/foo
tar: diffowner: Cannot utime: Operation not permitted
tar: diffowner: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

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

Меня не волнуют временные метки, и я верю, что разрешения уже должны быть правильными. Я запускаю это как обычный пользователь, поэтому он не должен пытаться --preserve-permissions если не сказано, что я не сделал. Что действительно беспокоит меня, так это состояние выхода: я собираюсь использовать это в сценарии и хочу знать, сработало ли фактическое извлечение.

Есть ли опция для tar, которая говорит, что она не должна устанавливать права доступа к каталогу, ни немедленно, ни с задержкой? В противном случае, какие другие решения вы бы предложили. Прямо сейчас я думаю о распаковке во временный каталог и использовании rsync для перемещения материала в существующее дерево. Но, возможно, вы знаете менее хакерский подход.

1 ответ1

22

Этот вариант tar может быть тем, что вы ищете:

 --no-overwrite-dir
       preserve metadata of existing directories

Я проверил следующим образом:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b --no-overwrite-dir -xvf test.tar diffowner
diffowner/
diffowner/foo
$ echo $?
0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .