tar:压缩文本标准输入和标准输出

tar:压缩文本标准输入和标准输出

使用tar,是否可以压缩标准输入文本并使压缩数据出现在标准输出中?例子:

$ echo "test" | tar c - 
<compressed blob here>

我正在使用 macOS Mojave。

答案1

简而言之,如果不将 stdin 的全部内容存储到文件或临时文件(例如内存中),就不可能做到这一点。

这是tar文件格式本身的限制,因为在存储文件内容之前,tar存储了文件的描述符,包括文件名等以及文件尺寸。所以 tar 在存储之前需要知道文件的大小是多少。从 stdin 读取时,tar 无法知道内容的大小,除非它读取所有内容,在这种情况下,它需要将它们存储在某个地方,以便将这些内容存储在 tarball 本身中。

也可以看看“是否可以直接从标准输入创建 .tar.gz 文件?或者,我需要将已经 gzip 压缩的文件打包在一起。”其中一个答案列出了一种首先存储文件内容的方法,然后查找并更新文件描述符以写入内容的实际大小。但这需要能够在输出文件上查找,如果您正在写入标准输出,通常情况并非如此......

简而言之,您需要将输入写入临时文件,以便将其添加到 tarball 中。

相关内容