我正在尝试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或其他东西去除填充。
答案 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实现,例如:
PharData
(http://php.net/manual/en/class.phardata.php)Archive::Tar
(https://perldoc.perl.org/Archive/Tar.html)tarfile
(https://docs.python.org/2/library/tarfile.html)