Я использую следующий псевдоскрипт для создания 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
Обязательно отмонтируйте эти каталоги, прежде чем с ними что-нибудь случайно случится. Смотритеэти предупреждения.