有没有办法知道给定目录中图像和代码的百分比?

有没有办法知道给定目录中图像和代码的百分比?

假设您从某处下载了一些 .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 目录包含图片/图像,但它并没有说明文本文件和文本目录占用了多少空间,以及 pixmaps 占用了多少空间。

答案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]) } }'

在命令行中给定一个目录,上述bash脚本将使用stat1来获取目录中及以下每个文件的大小(以字节为单位)。while 循环还会截取每个文件的后缀并将其与文件大小(以字节为单位)一起输出。

最后的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这里的 调用statstat从 GNU coreutils 包中为 GNU 定制的。 OpenBSD 上的stat完全不同的。

2假定 脚本由了解关联数组的实现awk运行,例如 GNU或.awkawkmawk

答案2

如果它位于压缩存档中,例如 .zip 文件或 .tgz 文件,您可以将压缩大小与未压缩大小进行比较。存档中的二进制文件往往会压缩得更少,尤其是图像和媒体文件(它们已经被压缩)。文本文件的压缩率更高(例如超过 %90)。

我现在太饿了,无法进行数学计算,但是如果您的存档比它解压到的目录小“很多”,那么您的存档中就有“很多”文本文件。如果您有一个与解压到的目录大小“非常接近”的存档,那么您就有一个与所有二进制文件“非常接近”的存档。

希望有帮助

相关内容