假设您从某处下载了一些 .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
脚本将使用stat
1来获取目录中及以下每个文件的大小(以字节为单位)。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这里的 调用stat
是stat
从 GNU coreutils 包中为 GNU 定制的。 OpenBSD 上的stat
是完全不同的。
2假定 脚本由了解关联数组的实现awk
运行,例如 GNU或.awk
awk
mawk
答案2
如果它位于压缩存档中,例如 .zip 文件或 .tgz 文件,您可以将压缩大小与未压缩大小进行比较。存档中的二进制文件往往会压缩得更少,尤其是图像和媒体文件(它们已经被压缩)。文本文件的压缩率更高(例如超过 %90)。
我现在太饿了,无法进行数学计算,但是如果您的存档比它解压到的目录小“很多”,那么您的存档中就有“很多”文本文件。如果您有一个与解压到的目录大小“非常接近”的存档,那么您就有一个与所有二进制文件“非常接近”的存档。
希望有帮助