어딘가에서 .zip/tar.gz 또는 프로젝트의 소스 코드를 다운로드했다고 가정해 보겠습니다. 결과적으로 얻을 수 있는 것은 임의의 파일 묶음입니다. 일부는 코드를 포함하고 일부는 이미지를 포함합니다. 이미지, 미디어 파일, 텍스트 파일의 비율을 알 수 있는 방법이 있나요? 이 작업을 수행할 수 있는 도구가 있으면 공유해 주세요. 그렇지 않다면 이를 수행하는 스크립트나 다른 것을 어떻게 작성하겠습니까?
업데이트 - 받은 의견을 바탕으로 추가 정보를 제공합니다.
예를 들어, 제가 말하고자 하는 바는 다음과 같습니다.
┌─[shirish@debian] - [~/games/I-Nex] - [10054]
└─[$] [$] ll -h
total 236K
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 21:25 debian
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 19:16 I-Nex
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 19:16 JSON
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 02:12 dists
-rw-r--r-- 1 shirish shirish 7.8K 2016-11-13 02:12 i2c_smbus.rules
-rw-r--r-- 1 shirish shirish 1.4K 2016-11-13 02:12 i-nex.mk
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 02:12 manpages
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 02:12 pixmaps
-rw-r--r-- 1 shirish shirish 97 2016-11-13 02:12 release.conf
-rw-r--r-- 1 shirish shirish 280 2016-11-13 02:12 requirements.md
-rwxr-xr-x 1 shirish shirish 1.4K 2016-11-13 02:12 changelog.awk
-rwxr-xr-x 1 shirish shirish 2.5K 2016-11-13 02:12 Makefile
-rw-r--r-- 1 shirish shirish 6.6K 2016-11-13 02:12 README.md
-rw-r--r-- 1 shirish shirish 176K 2016-11-13 02:12 Changelog.md
이제 이 예제는 pixmaps 디렉토리에만 그림/이미지가 포함되어 있으므로 간단하지만 텍스트 파일과 텍스트 디렉토리가 차지하는 공간과 pixmap이 차지하는 공간은 알려주지 않습니다.
답변1
#!/bin/bash
find "$1" ! -type d |
while read fpath; do
fname="${fpath##*/}"
suffix="${fname##*.}"
if [[ "$suffix" == "$fname" ]]; then
suffix="(none)"
fi
size="$( stat --format '%s' "$fpath" )"
printf '%s\t%d\n' "$suffix" "$size"
done |
awk '{ sz[$1] += $2 }
END { for (s in sz) { printf("%s:\t%d\n", s, sz[s]) } }'
명령줄에 디렉터리가 있으면 위 스크립트는 1을bash
사용하여 디렉터리와 그 아래에 있는 모든 파일의 크기를 바이트 단위로 가져옵니다. while 루프는 또한 각 파일의 접미사를 가로채서 파일 크기(바이트)와 함께 출력합니다.stat
최종 awk
스크립트 2는 정보를 요약하고 인쇄합니다.
예를 들어, 작업 프로젝트 중 하나에서 디렉터리를 실행합니다.
$ bash ./script.sh /home/kk/Work/Development/project/src/
c: 4559172
am: 369
h: 151369
o: 4613432
in: 42216
out: 3282712
(none): 2908962
Po: 18414
txt: 7129
필요한 경우 출력을 추가로 필터링하고 형식을 지정할 수 있습니다.
전체 크기의 백분율을 얻거나 file
파일 이름 접미사에 의존하는 대신 파일 유형을 얻거나 바이트가 아닌 단위로 크기를 출력하도록 수정하는 것은 독자의 연습 문제로 남아 있습니다.
1 여기서의 호출은 GNU coreutils 패키지에서 GNU에 맞게 사용자 정의 stat
되었습니다 . stat
OpenBSD stat
에서는완전히다른.
2GNU 또는 .awk
awk
awk
mawk
답변2
.zip 파일 또는 .tgz 파일과 같은 압축된 아카이브에 있는 경우 압축된 크기와 압축되지 않은 크기를 비교할 수 있습니다. 아카이브의 바이너리 파일, 특히 이미 압축된 이미지와 미디어 파일은 압축률이 낮은 경향이 있습니다. 텍스트 파일은 압축률이 더 높습니다(예: %90 이상).
지금은 너무 배가 고파서 수학을 할 수 없지만, 아카이브가 압축이 풀린 디렉터리보다 "많이" 작다면 아카이브에 "많은" 텍스트 파일이 있는 것입니다. 압축을 푼 디렉터리의 크기와 "매우 가까운" 아카이브가 있는 경우 모든 바이너리의 크기와 "매우 가까운" 아카이브가 있는 것입니다.
도움이 되길 바랍니다