tar (Unix) 和 tarfile (Python) 之间的根本区别是什么?

Sim*_*on1 5 python tar tarfile

tar在 Unix 和tarfilePython 中使用 tar 压缩文件夹导致文件大小不同的根本区别是什么?

在下面的示例中,存在 8.2 MB 的差异。我目前使用的是 Mac。本示例中的文件夹包含一堆用于测试目的的随机文本文件。

tar -cvf archive_unix.tar files/

python -m tarfile -c archive_pycli.tar files/ # using Python 3.9.6

-rw-r--r--  1 userid  staff  24606720 Oct 15 09:40 archive_pycli.tar
-rw-r--r--  1 userid  staff  16397824 Oct 15 09:39 archive_unix.tar
Run Code Online (Sandbox Code Playgroud)

qou*_*ify 6

有趣的问题。tarfile ( https://docs.python.org/3/library/tarfile.html )的文档提到,tarfile自 python 3.8 起,由该命令创建的 tar 存档的默认格式是,PAX_FORMAT而由该tar命令创建的存档具有 GNU 格式,我相信解释了差异。

现在生成与tar命令相同的存档以及具有默认格式的存档(如您的命令所做的那样):

import tarfile
with tarfile.TarFile(name='archive-py-gnu.tar', mode='w', format=tarfile.GNU_FORMAT) as tf:
    tf.add('tmp')
with tarfile.TarFile(name='archive-py-default.tar', mode='w') as tf:
    tf.add('tmp')
Run Code Online (Sandbox Code Playgroud)

用于比较:

$ tar cf archive-tar.tar tmp/
$ ls -l 
3430400 16:28 archive-py-default.tar
3317760 16:28 archive-py-gnu.tar
3317760 16:27 archive-tar.tar
Run Code Online (Sandbox Code Playgroud)

命令的结果file

$ file archive_unix.tar
archive_unix.tar: POSIX tar archive (GNU)
$ file archive-py-gnu.tar
archive-py-gnu.tar: POSIX tar archive (GNU)
$ file archive-py-default.tar
archive-py-default.tar: POSIX tar archive
Run Code Online (Sandbox Code Playgroud)

现在我无法告诉您不同格式之间的区别,抱歉。但我希望这会有所帮助。