tar.gzファイルから順にファイルを抽出する

tar.gzファイルから順にファイルを抽出する

Webから14GBに制限されたコンピューティングリソースとしてダウンロードする122,000個のファイルを含む大きなtar.gzファイルがあります。 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

どうですか? 100,000個を超えるファイルがあるため、10,000個のファイルが解凍スペースの10%未満を使用すると仮定できますか?単一のパイプはブロックする前に限られた量をバッファリングするため、何千ものファイルを抽出した後にtarを待機させることができます。

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

おすすめ記事