Допустим, у меня есть следующая структура каталогов где-то в моей файловой системе:

a/             dir;    alice:work; default dir rights
  b/           dir;    alice:work; default dir rights
    test.sh    script; alice:work; executable

Затем я создаю архив с этой структурой каталогов как bob и перечисляю только test.sh как файл, который я хочу добавить в архив:

sudo tar cjf backup.tar.bz2 a/b/test.sh

Теперь у меня есть архив backup.tar.bz2, который должен был сохранить права владения и права на файл, который я указал в команде (и я также ожидаю того же для родительских каталогов a & b!).

Теперь вот мое затруднительное положение. Если я, все еще как bob, попытаюсь извлечь содержимое архива в другом месте моей файловой системы в качестве теста, я ожидаю получить ту же файловую структуру с теми же правами владения и правами, что и при создании архива с , Однако при использовании следующей команды

sudo tar xjf backup.tar.bz2

Вместо этого я получаю следующую структуру файлов:

a/             dir;    root:root;  default dir rights
  b/           dir;    root:root;  default dir rights
    test.sh    script; alice:work; executable

Каким-то образом право собственности на родительские каталоги не сохраняется при извлечении из архива. Кажется, это дает право собственности на эти каталоги любому пользователю, извлекшему архив (в моем случае, root, поскольку я хочу сохранить права собственности и права).

Есть ли способ сказать tar, чтобы он оставался владельцем родительских каталогов? Я знаю, что это возможно, включив их в команду tar, которая создает архив:

sudo tar cjf backup.tar.bz2 a/ a/b/ a/b/test.sh

Но я бы предпочел этого не делать, если в a/ или a/ b/ есть другие файлы или каталоги, так как они также будут частью архива.

1 ответ1

0

Видимо мне нужно чаще читать справочные страницы. Если я добавлю параметр --no-recursion к моей последней команде, это будет именно то, что я хочу:

sudo tar --no-recursion -cjf backup.tar.bz2 a/ a/b/ a/b/test.sh

Это даст следующую структуру файла после извлечения с помощью команды в вопросе:

a/             dir;    alice:work; default dir rights
  b/           dir;    alice:work; default dir rights
    test.sh    script; alice:work; executable

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