5

我正在尝试压缩一些文件并通过 php passthru 命令将它们传递给用户。

问题是即使 tar 文件应该只有 2k 它总是 10240。有趣的数字对吗?

所以我把它分解为:

-sh-4.1# tar czf -  test | wc -c
10240

对比:

-sh-4.1# tar czf test.tar.gz test && wc -c test.tar.gz
2052 test.tar.gz

所以 tar 显然是用 NULL 填充文件。

那么我怎样才能让 tar 停止这样做。或者,我如何去除尾随的 NULL。

我正在运行tar (GNU tar) 1.15.1并且无法在我的工作站上重现tar (GNU tar) 1.23,因为这是一个嵌入式项目升级不是我正在寻找的答案(还)。

编辑:我希望有一个确实需要写入文件系统的解决方法。也许是一种阻止它填充或通过 sed 管道它或去除填充的东西的方法。

4

2 回答 2

1

您可以通过使用较小的块大小来减弱填充效果,尝试将 -b1 传递给 tar

于 2012-07-21T21:22:07.567 回答
1

您可以通过将块大小设置为可能的最小值来最小化填充 - 在我的系统上这是 512。

$ cat test
a few bytes
$ tar -c test | wc -c
10240
$ tar -b 1 -c test | wc -c
2048
$ tar --record-size=512 -c test | wc -c
2048
$

这将填充保持在最多 511 个字节。没有通过程序来删除填充、重写块头和重新创建归档结束签名,我认为这是你能做的最好的事情。那时你可能会考虑使用脚本语言,它是直接的本地 tar 实现,例如:

于 2018-10-18T01:55:41.947 回答