Что именно представляет собой GNU tar ././@LongLink?

Я прочитал , что тип записи tar 'L '(76) используется утилитами gnu tar и gnu-совместимым tar для указания того, что следующая запись в архиве имеет "длинное" имя. В этом случае блок заголовка с типом записи 'L' обычно кодирует имя ././@LongLink.

Мой вопрос: где описан формат следующего блока ?

Формат архива tar очень прост: это просто серия блоков по 512 байт. В обычном случае каждый файл в архиве tar представляется в виде последовательности блоков. Первый блок - это блок заголовка, содержащий имя файла, тип записи, время изменения и другие метаданные. Затем следуют необработанные данные файла, используя столько блоков по 512 байт, сколько требуется. Тогда следующая запись.

Если имя файла длиннее, чем умещается в пространстве, выделенном в блоке заголовка, gnu tar, очевидно, использует так называемый трюк ././@LongLink. Я не могу найти точное описание для этого.

Когда тип записи «L», как узнать, как долго «длинное» имя файла? Ограничено ли длинное имя 512 байтами, другими словами, что бы помещалось в одном блоке?

Самое главное: где это задокументировано?

14 голосов | спросил Cheeso 16 Jpm1000000pmSat, 16 Jan 2010 23:15:17 +030010 2010, 23:15:17

2 ответа


0

Просто наблюдая за одним архивом, вот что я догадался о типе записи 'L' в архивах tar и имени "././@LongLink":

Запись 'L' присутствует в заголовке для серии из 1 или более 512-байтовых блоков, которые содержат только имя файла для файла или каталога с именем более 100 символов. Например, если имя файла имеет длину 1200 символов, то размер в блоке заголовка будет 1200, и будет 3 дополнительных блока с данными имени файла; последний блок частично заполнен.

После этой серии следует еще один блок заголовка в традиционной форме - заголовок с типом «0» (обычный файл) или «5» (каталог), за которым следует соответствующее количество блоков данных с входными данными. В заголовке этой серии имя будет усечено до первых 100 символов фактического имени.

ИЗМЕНИТЬ
Смотрите мою реализацию здесь: http://cheesoexamples.codeplex.com/SourceControl/changeset/view/99885#1868643

ответил Cheeso 17 Jam1000000amSun, 17 Jan 2010 01:37:55 +030010 2010, 01:37:55
0

Обратите внимание, что информацию обо всем этом можно найти в проекте libtar:

http://www.feep.net/libtar/

Предлагаемый заголовок - libtar.h (в отличие от POSIX tar.h), который явно содержит длинное имя файла и длинную символическую ссылку.

Получите «поддельные» заголовки + данные для длинных имен файлов /ссылок, а затем «настоящий» заголовок (за исключением фактического имени файла и символической ссылки) после этого.

HEADER type 'L'
BLOCKS of data with the real long filename
HEADER type 'K'
BLOCKS of data with the real symbolic link
HEADER type '0' (or '5' for directory, etc.)
BLOCKS of data with the actual file contents

Конечно, в MS-Windows вы, вероятно, не будете обрабатывать символические ссылки, хотя в Win7 говорят, что символические ссылки в MS-Windows работают (наконец-то).

Соответствующее определение из libtar.h:

/* GNU extensions for typeflag */
#define GNU_LONGNAME_TYPE   'L'
#define GNU_LONGLINK_TYPE   'K'
ответил Alexis Wilke 20 J0000006Europe/Moscow 2013, 05:28:33

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132