如何获得空的tar档案?


21

我正在制作一个RPM,其中所有内容都包含在.spec文件中(不要问:-)。rpmbuild需要一个“Source”文件,所以我试图创建一个空的tar文件。但是,如果我不提供任何文件名,tar会抱怨:

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

如何创建真正空的tar文件?


它在此之前得到了回答: superuser.com/questions/133186 / ...
Rhyuk

3
实际上,@ Ruhuuk,它还没有。该帖子是忘记列出文件名的人,答案帮助他们意识到他们需要传递另一个参数,导致非空档案。这就是为什么我改变了问题的标题,并创建了这个问题,它DOES回答这个问题的题目是问。
Sean Reifschneider

Answers:


23

您可以强制GNU和BSD tar创建一个空存档:

tar -cf tarfilename.tar -T /dev/null

ya,'f'选项必须是last,因为它指定了文件名。您将创建一个名为T的存档,但无论如何都会丢失tarfilename.tar文件时出错。
lornix

1
创建空tar的一个原因:脚本化tar创建。第1步:创建tar。第2步:逐个添加文件。您可以使用“if first file然后创建else然后追加”来执行此操作,但这并不是那么顺利。
dpk

4
@dpk:如果我理解你在说什么,你为什么不总是使用追加?Append将创建tar文件(如果它尚不存在),因此您不需要检查它是否是第一个文件,只需追加,如果它是第一个文件tar将创建它。
Sean Reifschneider

1
@SeanReifschneider看起来这样可行。尼斯。
dpk

1
@SeanReifschneider:+1表示附加模式为第一个文件创建存档(如果它尚未存在于磁盘上)。我正在使用find命令在脚本中以追加模式执行tar,因此不需要事先创建存档文件。
GuruM 2013年

7

BSD: tar cvf empty.tar --from-file /dev/null

GNU(Linux): tar cvf empty.tar --files-from /dev/null

Solaris上: tar cvf empty.tar -I /dev/null


最后一些适用于Solaris的东西!! 非常感谢
AJPerez 2016年

3

我可以通过归档单个文件创建一个空档案,然后从档案中删除该文件。

tar cf empty.tar somefile                   # creates archive
tar --delete -f empty.tar somefile          # remove the file
tar tf empty.tar                            # list contents of archive

这适合我。


2
我可以验证使用GNU tar这将产生所有NUL字符的预期10K文件。
Sean Reifschneider

3

空tar文件只是一个文件,其中包含10240个NUL字节。因此,要创建一个空的tar文件,您甚至不需要tar,而是可以使用以下任一方法:

$ head --bytes=10240 /dev/zero > empty.tar
$ truncate --size=10240 empty.tar
$ fallocate --length=10240 empty.tar
$ dd if=/dev/zero bs=10240 count=1 iflag=fullblock > empty.tar
$ dd if=/dev/zero bs=1 count=10240 > empty.tar

@KamilMaciorowski感谢您提供有关dd使用的提示!我学到了新东西!关于回答正确的问题:标题确实询问“如何强制tar”,但在阅读问题文本时,很明显,OP实际上想要一个空的tar文件,并且它应该无关紧要。
josch

我继续编辑了这个问题。
Kamil Maciorowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.