2015-08-24 3 views
1

Я хочу реализовать проверку файла tar. Мне не интересно только проверять расширение файла, но мне нужен более надежный способ проверить. Например, для формата zip я мог бы проверить некоторые стартовые байты. Но каков способ для файлов tar?Как проверить, находится ли файл в формате tar?

С уважением, B

ответ

1

Проверьте магические байты при смещении 257. Если они соответствуют «ustar», включая нулевой ограничитель, файл, вероятно, является tar.

См: http://www.gnu.org/software/tar/manual/html_node/Standard.html

/* tar Header Block, from POSIX 1003.1-1990. */ 

/* POSIX header. */ 

struct posix_header 
{        /* byte offset */ 
    char name[100];    /* 0 */ 
    char mode[8];     /* 100 */ 
    char uid[8];     /* 108 */ 
    char gid[8];     /* 116 */ 
    char size[12];    /* 124 */ 
    char mtime[12];    /* 136 */ 
    char chksum[8];    /* 148 */ 
    char typeflag;    /* 156 */ 
    char linkname[100];   /* 157 */ 
    char magic[6];    /* 257 */ 
    char version[2];    /* 263 */ 
    char uname[32];    /* 265 */ 
    char gname[32];    /* 297 */ 
    char devmajor[8];    /* 329 */ 
    char devminor[8];    /* 337 */ 
    char prefix[155];    /* 345 */ 
           /* 500 */ 
}; 

#define TMAGIC "ustar"  /* ustar and a null */ 
#define TMAGLEN 6 
+0

Это не является надежным и, кстати, не может с архивами производства ГНУ дегтя, которые создаются с неправильным магическим числом " ustar "(без байта NUL) и версии" \ 0 ". GNU tar может создавать архивы ustar, но по какой-то причине они решили не делать этого по умолчанию. – fuz

+0

@FUZxxl Да, это странно. Любая идея, почему они это сделают? – Navin

+1

Не знаю. Похоже на то, что у меня есть блокиратор. В manpage говорится: «В следующей версии мы собираемся создавать архивы POSIX по умолчанию» примерно с десятилетия. Нет никакой веской причины того, что делает GNU tar. В конце концов, их собственный формат не более мощный, чем формат POSIX (pax), и последний легко расширяется. – fuz

1

В оболочке вы можете использовать командный файл

file AFile.tar 
AFile.tar: POSIX tar archive (GNU) 
Смежные вопросы