Filesystems
在shell中按副檔名計算總文件大小
我們有一組包含 lucene 索引的目錄。每個索引都是不同文件類型的混合(按副檔名區分),例如:
0/index/_2z6.frq 0/index/_2z6.fnm .. 1/index/_1sq.frq 1/index/_1sq.fnm ..
(大約有 10 個不同的副檔名)
我們想通過文件副檔名獲得總數,例如:
.frq 21234 .fnm 34757 ..
我嘗試了 du/awk/xargs 的各種組合,但發現要做到這一點很棘手。
對於您使用的任何給定擴展
find /path -name '*.frq' -exec ls -l {} \; | awk '{ Total += $5} END { print Total }'
獲取該類型的總文件大小。
經過一番思考
#!/bin/bash ftypes=$(find . -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq) for ft in $ftypes do echo -n "$ft " find . -name "*${ft}" -exec ls -l {} \; | awk '{total += $5} END {print total}' done
它將輸出找到的每種文件類型的大小(以字節為單位)。
使用 bash version4,您只需要呼叫
find
,ls
而不awk
需要:declare -A ary while IFS=$'\t' read name size; do ext=${name##*.} ((ary[$ext] += size)) done < <(find . -type f -printf "%f\t%s\n") for key in "${!ary[@]}"; do printf "%s\t%s\n" "$key" "${ary[$key]}" done