Linux

tar:壓縮文本標準輸入和標準輸出

  • November 22, 2018

使用tar,是否可以壓縮標準輸入文本並將壓縮數據顯示在標準輸出中?例子:

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

我正在使用 macOS Mojave。

簡而言之,如果不將標準輸入的全部內容儲存到文件或臨時文件中(例如在記憶體中),就不可能做到這一點。

這是 tar 文件格式本身的一個限制,因為在儲存文件內容之前, tar 會儲存文件的描述符,包括文件名等以及文件大小。所以 tar 在儲存之前需要知道文件的大小。從標準輸入讀取時,tar 無法知道內容的大小,除非它讀取所有內容,在這種情況下,它需要將它們儲存在某個地方,以便將這些內容儲存在 tarball 本身中。

另請參閱“是否可以直接從標準輸入製作 .tar.gz 文件?或者,我需要將已經 gzip 壓縮的文件一起 tar。” 其中一個答案列出了一種首先儲存文件內容的方法,然後回溯並更新文件描述符以寫入內容的實際大小。但這需要能夠搜尋輸出文件,如果您正在寫入標準輸出,通常情況並非如此……

簡而言之,您需要將輸入寫入臨時文件,以便將其添加到 tarball。

引用自:https://unix.stackexchange.com/questions/483506