
我知道您可以從tar
.
tar -xf file.tar.gz /small/single/file
我打算在磁碟/記憶體有限的嵌入式系統上運行它。我想知道這個命令如何處理大 tarball。
提取單一檔案是否會導致整個 tarball 解壓縮到記憶體中?我不介意將其全部解壓,但只要它具有較小的緩衝區即可。
假設我有 100MB 的可用 RAM 和 5MB 的可用磁碟空間。另外,/small/single/file
小於 5MB。另外,來源 tarball 大小為 500MB。我可以安全提取嗎/small/single/file
?
答案1
答案可能取決於tar
您正在使用的實現,但實際上,我希望大多數實現使用相對較小的緩衝區來處理 tarball。tar
在 2GiB 壓縮的 tarball 上使用 GNUbzip2
來提取單一文件,我得到
64.07user 4.84system 2:53.45elapsed 97%CPU (0avgtext+0avgdata 4664maxresident)k
4046976inputs+8outputs (0major+1194minor)pagefaults 0swaps
(使用 GNU time
)。如您所見,最大駐留大小低於 5MiB。
答案2
為了最大限度地減少 RAM/磁碟的使用,我建議使用這樣的管道:
gzip -dc file.tar.gz| tar -f - /small/single/file