我知道您可以从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