웹에서 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