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

Разыменование 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команде? Или мне нужно полностью изменить способ построения архива?

решение1

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

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

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

-C, --directory=КАТАЛОГ

         change to directory DIR

например

mkdir tmp
tar -C tmp -xf apps.tar

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

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

решение2

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

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

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

решение3

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

решение4

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

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

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

Связанный контент