如何确定 tar 存档的格式

Chr*_*her 4 linux posix gnu tar command-line-interface

在 Linux 中,如何确定用于创建给定 tarball 的格式?

我想检测给定的存档是否是使用posixgnu格式创建的。

我已经阅读了GNU tar手册页,它解释了如何在创建过程中控制格式。但是,我没有看到有关如何查看现有文件格式的任何信息。

rra*_*nza 9

你可以file在Linux下使用查看未压缩存档的指纹(文件不会超出压缩层,所以先解压):

$ tar --format=posix -cf posix.tar foo      # create test posix archive
$ tar --format=gnu   -cf gnu.tar   foo      # create test gnu archive
$ file gnu.tar posix.tar
gnu.tar:   POSIX tar archive (GNU)
posix.tar: POSIX tar archive
Run Code Online (Sandbox Code Playgroud)

如果存档被压缩,请先解压缩它:

$ tar --format=posix -czf posix.tar.gz foo  # create test gzip posix archive
$ tar --format=gnu   -czf gnu.tar.gz   foo  # create test gzip gnu archive
$ gunzip posix.tar.gz
$ gunzip gnu.tar.gz
$ file gnu.tar posix.tar
gnu.tar:   POSIX tar archive (GNU)
posix.tar: POSIX tar archive
Run Code Online (Sandbox Code Playgroud)

GNU 基于较旧的 POSIX 格式,所以这就是它说两者兼而有之的原因。

对于细节问题的细节,该格式在GNU焦油手册中描述这里和更多的细节在这里