bar*_*bug 16 filesystems shell disk-space-utilization
我们有一组包含 lucene 索引的目录。每个索引都是不同文件类型的混合(按扩展名区分),例如:
0/index/_2z6.frq
0/index/_2z6.fnm
..
1/index/_1sq.frq
1/index/_1sq.fnm
..
Run Code Online (Sandbox Code Playgroud)
(大约有 10 个不同的扩展名)
我们想按文件扩展名获得总数,例如:
.frq 21234
.fnm 34757
..
Run Code Online (Sandbox Code Playgroud)
我尝试了 du/awk/xargs 的各种组合,但发现做到这一点很棘手。
use*_*517 22
对于任何给定的扩展,您可以使用
find /path -name '*.frq' -exec ls -l {} \; | awk '{ Total += $5} END { print Total }'
Run Code Online (Sandbox Code Playgroud)
获取该类型的总文件大小。
经过一些思考
#!/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
Run Code Online (Sandbox Code Playgroud)
这将输出找到的每种文件类型的大小(以字节为单位)。
使用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11106 次 |
| 最近记录: |