Files

有沒有辦法知道給定目錄中圖像和程式碼的百分比?

  • January 28, 2017

假設您從某個地方下載了一些 .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 消耗了多少空間。

#!/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這裡 的stat呼叫是為statGNU coreutils 包中的 GNU 量身定制的。statOpenBSD 上的完全不同

2 假定腳本由了解關聯數組的實現執行,例如GNU或.awk``awk``awk``mawk

引用自:https://unix.stackexchange.com/questions/340619