(실제로 긴) zip 파일 목록이 주어지면 압축 해제 된 파일의 크기를 어떻게 알 수 있습니까?
(실제로 긴) zip 파일 목록이 주어지면 압축 해제 된 파일의 크기를 어떻게 알 수 있습니까?
답변:
이를 사용 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
을 입력하면 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
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}
'
df -i
인데, XFS에 비해 inode에 필요한만큼의 공간을 동적으로 할당 할 수있는 XFS에 비해)