如何检查文件是否为tar格式?

How to check whether a file is in tar format?

我想检查 tar 文件。 我对检查文件扩展名不感兴趣,但我需要更可靠的方法来检查。 例如,对于 zip 格式,我可以检查一些前导字节。但是tar个文件的方式是什么?

此致, B

您可以检查文件的 header。 规格如下:http://www.gnu.org/software/tar/manual/html_node/Standard.html

检查偏移量 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

在shell中可以使用文件命令

file AFile.tar
AFile.tar: POSIX tar archive (GNU)