Сохранение прав собственности и прав родительского каталога при извлечении архива tar

543
ThaMe90

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

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 / есть другие файлы или каталоги, так как они также будут частью архива.

0

1 ответ на вопрос

0
ThaMe90

Видимо мне нужно чаще читать справочные страницы. Если я добавлю параметр --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 

Похожие вопросы