Назад | Перейти на главную страницу

Разыменование tar только 1 уровень

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

mkdir tmp
ln -s /path/to/app1/bin              tmp/app1
ln -s /and/path/going/to/the-app-2   tmp/app2
tar -c --dereference -f apps.tar tmp

мне нужно --dereference вариант здесь, чтобы перейти по ссылкам, которые я только что сделал в tmp. Причина, по которой я делаю ссылки, в первую очередь, состоит в том, чтобы хранить в архиве каталоги с другим именем, чем у них в файловой системе.

До сих пор все работало нормально. Однако теперь у меня ситуация, когда /path/to/app1 также содержит ссылки, и те, по которым я не хочу переходить.

Возможно ли это с некоторыми изменениями в tar команда? Или мне нужно полностью переключиться на способ создания архива?

Я не думаю, что есть способ сделать только частичное разыменование. Вы могли бы сделать что-то вроде

tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2

а затем извлечь их в другой корень с помощью -C

-C, --directory = DIR

         change to directory DIR

например

mkdir tmp
tar -C tmp -xf apps.tar

что имело бы эффект, аналогичный тому, как вы сейчас создаете свой архив.

Вы также можете использовать -C, чтобы указать на любой существующий каталог.

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

Вам действительно нужно, чтобы структура каталогов в архиве отличалась от структуры на диске?

Если нет, то вы можете просто пометить их как есть:

tar -cf file.tar /path/1 /path/2

Если ты root тогда лучше всего использовать команду mount bind, чтобы жестко связать каталоги, которые вы хотите настроить tar, а не создавать на них символические ссылки. Тогда вам не нужно будет использовать опцию разыменования.

mkdir tmp
mount --bind /path/to/app-1 tmp/app-1
mount --bind /path/to/app-2 tmp/app-2
tar cf apps.tar tmp

Обязательно размонтируйте эти каталоги, прежде чем с ними что-нибудь случайно произойдет. Видеть эти предупреждения.