tar gzip 압축 해제할 때 퍼센트 단위로 진행률을 표시하는 방법.

어차피 전체 사이즈만 알 수 있으면 되므로 xz, bzip2 등도 가능.

 

/*
tar 의 아래 옵션 3개를 이용
--blocking-factor: checkpoint가 실행될 record 단위 지정
--checkpoint: N번째 record일 때마다 진행상태 출력
--checkpoint-action: checkpoint마다 실행할 액션 지정
*/
 
 
// 1% 단위로 진행률을 표시하고 싶다면,
// 1%에 해당하는 blocking-factor 사이즈를 지정하고, checkpoint마다 해당 내용을 출력하면 됨
 
 
 
 
// 1%에 해당하는 blocking-factor = ((전체 사이즈 / 512) / 100) + 1
 
 
 
 
// 우선 압축 해제시 전체 사이즈를 알아내야 함
// gzip
// gzip 압축을 해제하면 test.tar 라는 파일이 나온다는 뜻이고 압축되지 않은 사이즈는 513423360 바이트
[root@localhost]# gzip -l test.tar.gz
         compressed        uncompressed  ratio uncompressed_name
          422753193           513423360  17.7% test.tar
 
 
// xz
// 전체 사이즈는 135454720
[root@localhost]# xz --robot -l test.tar.xz
name    test.tar.xz
file    1       1       28643872        135454720       0.211   CRC64   0
totals  1       1       28643872        135454720       0.211   CRC64   0       1
 
 
 
 
// bzip2
// 전체 사이즈는 135454720
[root@localhost]# bzcat test.tar.bz2 | wc -c
135454720
 
 
 
 
 
 
 
// 이를 변수에 저장 (gzip 기준)
[root@localhost]# total_size=`gzip -l test.tar.gz | awk 'NR==2' | awk '{print $2}'`
// 확인
[root@localhost]# echo $total_size
513423360
 
 
// blocking_factor 계산
[root@localhost]# let "blocking_factor=(($total_size / 512) / 100) + 1"
// 확인
[root@localhost]# echo $blocking_factor
10028
 
 
// 계산된 blocking_factor를 이용하여 1% 단위로 진행률을 출력
[root@localhost]# tar xfz test.tar.gz --blocking-factor=$blocking_factor --checkpoint=1 --checkpoint-action=ttyout='unpacking %u%\r'
// 실행하면 unpacking N% 라는 메시지가 진행률에 따라 출력됨 (\r 이 없으면 라인 단위로 주루룩 출력됨)
 
 
// --checkpoint와 --checkpoint-action을 이용하여 여러 방식의 처리가 가능함
// 예를 들어 10% 단위로 출력하고 싶으면 --checkpoint를 10으로 지정하는 식으로.
// checkpoint-action에는 출력 외에도 많은 다양한 옵션이 있음

 

 

[참고]

https://www.gnu.org/software/tar/manual/tar.html#checkpoints

 

 

 

 

 

 

Posted by bloodguy
,