30 lines
626 B
Plaintext
30 lines
626 B
Plaintext
func traverse(Block callback, Dir dir) {
|
||
dir.open(\var dir_h) || return nil
|
||
|
||
for entry in (dir_h.entries) {
|
||
if (entry.kind_of(Dir)) {
|
||
traverse(callback, entry)
|
||
} else {
|
||
callback(entry)
|
||
}
|
||
}
|
||
}
|
||
|
||
var dir = (ARGV ? Dir(ARGV[0]) : Dir.cwd)
|
||
|
||
var group = Hash()
|
||
var files_num = 0
|
||
var total_size = 0
|
||
|
||
traverse({ |file|
|
||
group{file.size+1 -> log10.round} := 0 += 1
|
||
total_size += file.size
|
||
files_num += 1
|
||
}, dir)
|
||
|
||
for k,v in (group.sort_by { |k,_| Num(k) }) {
|
||
say "log10(size) ~~ #{k} -> #{v} files"
|
||
}
|
||
|
||
say "Total: #{total_size} bytes in #{files_num} files"
|