압축되지 않은 지퍼가 차지하는 공간을 아는 방법


23

(실제로 긴) zip 파일 목록이 주어지면 압축 해제 된 파일의 크기를 어떻게 알 수 있습니까?

답변:


38

이를 사용 unzip -Zt zipname하면 전체 크기와 함께 아카이브 내용에 대한 요약을 직접 인쇄합니다. 출력 결과는 다음과 같습니다.

unzip -Zt a.zip
1 file, 14956 bytes uncompressed, 3524 bytes compressed:  76.4%

그런 다음 awk를 사용하여 바이트 수를 추출 할 수 있습니다.

unzip -Zt a.zip | awk '{print $3}'
14956

마지막으로 Tom의 답변과 같이 for 루프에 넣으십시오.

total=0
for file in *.zip; do # or whichever files you want
    (( total += $(unzip -Zt $file |awk '{ print $3 }') ))
done
echo $total

19

을 입력하면 unzip -l <zipfile>압축되지 않은 크기로 압축 된 파일 목록과 전체 압축되지 않은 크기의 파일 목록이 인쇄됩니다.

이것은 사람이 읽을 수있는 출력이지만을 사용하여 기계가 읽을 수있는 숫자를 얻을 수 있습니다 unzip -l <zipfile> | tail -n1 | awk '{ print $1 }'.

총 크기를 얻으려면

total=0
for file in *.zip; do # or whichever files you want
    (( total += $(unzip -l $file | tail -n1 | awk '{ print $1 }') ))
done
echo $total

15

unzip -l각 파일의 크기를 나열하고 합계와 함께 마지막 줄을 인쇄합니다. 따라서 zip 파일을 반복하여 또는의 출력을unzip -l "$zip" | awk 'END {print $1}' 합칠 수 있습니다 unzip -Zt "$zip" | awk 'END {print $3}'. 쉘 루프의 unzip -Zt경우 조금 더 빠를 수 있습니다.

total=0
for z in *.zip; do
  set $(unzip -Zt -- "$z")
  total=$((total + $3))
done

파일의 전체 크기 만 알려줍니다. 각 파일에는 작은 오버 헤드가 있습니다. 이름을 저장할 공간, 일부 메타 데이터를 저장할 공간 및 대부분의 파일 시스템이 파일을 블록으로 할당하기 때문에 약간의 사용되지 않는 공간입니다. 일반적인 파일 시스템에서 오버 헤드는 최대 몇 킬로바이트에이를 수 있습니다. 오버 헤드는 파일 크기, 디렉토리 구조 (디렉토리 오버 헤드로 인한 디렉토리 구조) 및 동일한 블록에서 여러 개의 작은 파일을 병합하는 파일 시스템의 기능에 의존하기 때문에 정확하게 예측할 수 없습니다.

대부분의 파일이 몇 킬로바이트 이상인 경우 걱정하지 마십시오. 그러나 파일이 매우 작은 경우 오버 헤드를 고려할 수 있습니다. 다시 한 번, 오버 헤드는 파일 시스템에 따라 다릅니다. ext4에서 각 파일은 전체 블록을 채 웁니다 (대부분의 시스템에서 기본적으로 4kB). 다음 스크립트는 각 파일을 최대 4kB로 반올림하고 파일 이름 길이에 몇 바이트를 더하여 총 크기와 비슷합니다.

for z in *.zip; do
  unzip -l -- "$z"
done | awk '
    $2 ~ /^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/ {total += ($1+4095)/4096*4096 + length($0)}
    END {print total}
'

작은 파일을 언급하고 파일 시스템이 작은 파일을 함께 압축하지 않는 사실에 대해 +1 AFAIK, win / OSX / Linux / BSD에는 주류 파일 시스템이 없습니다 (즉, 데스크탑 또는 서버에서 / 및 / home에 사용하도록 권장 할 수있는 파일 시스템). 옵션으로 작은 파일 압축이 있습니다. Reiserfs는이 작업을 수행 할 수있는 옵션 (더 큰 파일의 꼬리)이 있었지만 유지 관리되지 않았습니다. 그래도 엄청나게 긴 파일 이름 은 생각하지 못했습니다 . 잘 잡았습니다.
Peter Cordes

inode의 크기 (XFS)이므로 파일 당 256B 또는 512B 상수를 추가 할 수도 있습니다. ext4는 여전히 정적으로 inode를 할당한다고 생각하므로 inode에 사용되지 않은 공간은 다른 데이터를 유지할 수 없었습니다. (이것이 ext4에 필요한만큼의 inode가 적은 이유 df -i인데, XFS에 비해 inode에 필요한만큼의 공간을 동적으로 할당 할 수있는 XFS에 비해)
Peter Cordes

1

엄마 봐, 루프 없음!

다음은 루프를 사용하지 않지만 여전히 같은 대답에 도달하기 때문에 약간 더 빠를 수있는 또 다른 솔루션입니다.

unzip -l \*.zip|awk 'BEGIN{total=0}/        [0-9]+ files/{total=total+$1;}END{print "total bytes: "total}'

"BEGIN {total = 0}"부분은 반드시 필요한 것은 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.