如何让tar从stdin读取输入?

我需要在shell脚本中的管道中使用tar来存档和压缩一些文件。

在阅读了tar的联机帮助页之后,我通过运行它和-O参数将tar输出到stdout ,但是我无法找到如何从stdin输入它。 由于许多命令从stdin读取,如果没有指定其他输入,我试过:

 pv ~/foo | tar c -O ~/foo.tar 

但那不起作用:

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

如何让tarstdin读取输入?

由于没有提取文件,因此忽略使用-Oc 。 你会得到相同的结果:

 $ tar c -O foo | tar t foo $ tar c foo | tar t foo 

这就是为什么我发现你的错误令人惊讶,因为如果你指定一个路径, tar就不是懦夫。

tar 无法从stdin中读取文件数据来创建存档,因为tar无法知道文件是什么 – 文件的开头或结尾,路径和元数据是什么。

请参阅我在stackexchange上的回答 。 这是一个python脚本,它将stdin附加到tar文件中,赋予它一个任意名称。