使用偏移量讀取部分下載的 gzip
假設有一個巨大**
db.sql.gz
**的 100GB 可用https://example.com/db/backups/db.sql.gz
並且伺服器支持範圍請求。因此,我沒有下載整個文件,而是下載了**
y
帶有字節偏移量(比如說 1000 字節)的x
**字節(比如說 1024 字節),如下所示。
curl -r 1000-2024 https://example.com/db/backups/db.sql.gz
使用上述命令,我能夠下載 gzip 文件的部分內容,現在我的問題是如何讀取該部分內容?
我試過
gunzip -c db.sql.gz | dd ibs=1024 skip=0 count=1 > o.sql
了,但這給出了一個錯誤gzip:dbrange.sql.gz:不是 gzip 格式
該錯誤是可以接受的,因為我猜在文件的頂部可能有描述編碼的標題塊。
我注意到,如果我下載沒有偏移量的文件,我可以使用
gunzip
和管道讀取文件。
curl -r 0-2024 https://example.com/db/backups/db.sql.gz
gzip
不生成塊壓縮文件(有關血腥細節,請參閱RFC),因此它本身不適合隨機訪問。您可以從流中開始讀取並隨時停止,這就是您的curl -r 0-2024
範例有效的原因,但您不能在中間選擇流,除非您有一個補充文件來提供失去的數據(例如索引文件由gztool
) 創建。為了實現您想要做的事情,您需要使用某種塊壓縮;例如
bgzip
(生成可以通過 plain 解壓縮的文件gzip
)或bzip2
, 並在接收端做一些工作來確定塊邊界的位置。Peter Cock 寫了一些關於這個主題的有趣文章:BGZF - 被封鎖、更大、更好的 GZIP!,隨機訪問BZIP2?