如何让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.
如何让tar
从stdin
读取输入?
由于没有提取文件,因此忽略使用-O
和c
。 你会得到相同的结果:
$ tar c -O foo | tar t foo $ tar c foo | tar t foo
这就是为什么我发现你的错误令人惊讶,因为如果你指定一个路径, tar
就不是懦夫。
tar
无法从stdin中读取文件数据来创建存档,因为tar
无法知道文件是什么 – 文件的开头或结尾,路径和元数据是什么。
请参阅我在stackexchange上的回答 。 这是一个python脚本,它将stdin附加到tar文件中,赋予它一个任意名称。