删除tar生成的尾随空字符

时间:2012-07-06 10:56:57

标签: linux tar

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

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

所以我把它分解为:

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

VS

-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或其他东西去除填充。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以通过将块大小设置为最小可能的值来最小化填充-在我的系统上为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实现,例如: