Files
有沒有辦法知道給定目錄中圖像和程式碼的百分比?
假設您從某個地方下載了一些 .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
腳本將使用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 量身定制的。stat
OpenBSD 上的完全不同。2 假定腳本由了解關聯數組的實現執行,例如GNU或.
awk``awk``awk``mawk