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