按顺序从 tar.gz 文件中提取文件

按顺序从 tar.gz 文件中提取文件

我有一个包含 122000 个文件的大型 tar.gz 文件,我正在将其从网络下载到限制为 14GB 的计算资源中。 tar.gz 为 3.3GB,完全解压后的存档为 29GB。我知道我可以按名称提取每个文件,但这非常慢。

所以我们都在谈论同一件事......

# make a tar
for i in {0..9}
do
echo "file $i" > file$i.txt
done

tar -czvf files.tar.gz file*.txt 
rm *.txt


# extract each file one at a time
for files in `tar tf files.tar.gz`
do
tar Oxvzf files.tar.gz $files | gzip > $files.gz
done

有没有一种方法可以按顺序提取每个文件,而不必每次循环通过文件列表找到所需的文件?

答案1

怎么样?既然您有 > 100k 个文件,我们是否可以假设 10k 个文件使用 <10% 的解压空间?单个管道在阻塞之前缓冲有限的数量,因此您可以在提取数千个文件后让 tar 等待:

tar xvfz files.tar.gz |while read filepath; do 
    [ -f "$filepath" ] && gzip "$filepath"
done

相关内容