Уникайте помилок через те, що не вдалося відновити дозволи каталогу


13

Я спостерігаю таку поведінку як з дьогтом 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
Цікаво, чи існує спосіб зробити це в час створення смоли на відміну від видобутку ..?
Roy Truelove

Відповіді:


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

1
Також працював над моєю справою, в якій я витягнув архів дьогтю на змонтовану акцію Samba Зауважте, що на відміну від команди, яка припускає, вона також пригнічує помилку, коли пункт призначення порожній (тобто всі каталоги, які давали б помилки, були створені самим tar). Знову дякую!
користувач149408
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.