在Linux中,我如何确定用于创建给定tarball的格式?
我想检测一个给定的归档文件是使用posix还是gnu格式创建的。
我已经阅读了GNU tar的man页面,其中解释了如何在创建过程中控制格式。然而,在现有文件中查看格式的内容并没有提到。
我想检测一个给定的归档文件是使用posix还是gnu格式创建的。
我已经阅读了GNU tar的man页面,其中解释了如何在创建过程中控制格式。然而,在现有文件中查看格式的内容并没有提到。
在Linux下,您可以使用file
命令查看未压缩存档的指纹:
$ touch foo # create test file
$ tar --format=posix -cf posix.tar foo # create test posix archive
$ tar --format=gnu -cf gnu.tar foo # create test gnu archive
$ file posix.tar gnu.tar
posix.tar: POSIX tar archive
gnu.tar: POSIX tar archive (GNU)
如果归档文件已经压缩,请先解压缩,因为 file
不能穿透压缩层:$ touch foo # create test file
$ 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
$ file posix.tar.gz gnu.tar.gz # show output when compressed
posix.tar.gz: gzip compressed data
gnu.tar.gz: gzip compressed data
$ gunzip posix.tar.gz # decompress to posix.tar
$ gunzip gnu.tar.gz # decompress to gnu.tar
$ file posix.tar gnu.tar # show output after decompression
posix.tar: POSIX tar archive
gnu.tar: POSIX tar archive (GNU)
或者,通过将输出直接管道传输到 file
的标准输入中,检查压缩的档案而不保存解压缩文件:
$ gunzip --stdout posix.tar.gz | file -
/dev/stdin: POSIX tar archive
$ gunzip --stdout gnu.tar.gz | file -
/dev/stdin: POSIX tar archive (GNU)
GNU基于较旧的POSIX格式,这就是为什么它会这样说的原因。
file
就没用了。所以,我必须先解压它。感谢您(快速)的回答!如果您更新响应以指出必须先解压存档,我将接受此解决方案。 - Christophertarfile
,tar = tarfile.open("posix.tar")
和 tar = tarfile.open("gnu.tar")
都会得到一个tar.format
等于1,而这个值代表的是 tarfile.GNU_FORMAT
。 - rrauenzacat foo.tar.gz | gunzip | file -
以从标准输入中识别数据。然后,foo.tar.gz
不会在文件系统中解压缩为 foo.tar
,而是保持完整。 - Lassi