Com as ferramentas do GNU, você pode fazer:
find . \( -path './*/*' -o -type d \) -printf '%TF %TH:%TM/%s/%pfind . \( -path './*/*' -o -type d \) -printf '%TF %TH:%TM/%s/%p%pre%' |
gawk -F/ -v 'RS=%pre%' '
BEGIN{split("K/M/G/T/P/E/Z/Y", u)}
function h(n, i) {
while (n >= 1024) {n /= 1024; i++}
return sprintf("%.4g%s", n, u[i])
}
{s[$4] += $2; n[$4]++}
NF == 4 {t[$4] = $1}
END{
PROCINFO["sorted_in"] = "@ind_str_asc"
for (d in t) printf "%-13s %-8s %s %s\n", d, h(s[d]), t[d], n[d]
}'
' |
gawk -F/ -v 'RS=%pre%' '
BEGIN{split("K/M/G/T/P/E/Z/Y", u)}
function h(n, i) {
while (n >= 1024) {n /= 1024; i++}
return sprintf("%.4g%s", n, u[i])
}
{s[$4] += $2; n[$4]++}
NF == 4 {t[$4] = $1}
END{
PROCINFO["sorted_in"] = "@ind_str_asc"
for (d in t) printf "%-13s %-8s %s %s\n", d, h(s[d]), t[d], n[d]
}'
Isso conta o número e o tamanho aparente cumulativo (não uso do disco) de todos os arquivos nos diretórios, de forma recursiva (adicione -maxdepth 2
a find
se não quiser considerar arquivos em níveis mais profundos). Para o uso do disco, você precisaria contar as contagens de blocos e contar apenas links físicos uma vez, o que se tornaria mais complicado.