我有一个包含 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