LINUX.ORG.RU
решено ФорумAdmin

Подсчёт файлов по директориям

 , ,


0

1

Я тут пытался найти кто большую часть inode забрал на разделе с ext4. Хочется вывод типа такого:

1017         /home/disarmer/pg
1017         ............../pg/t
951          ................./t/base
40           .................../global
4            .................../pg_clog
2            .................../pg_multixact
1            .................../pg_notify
4            .................../pg_stat
1            .................../pg_subtrans
8            .................../pg_xlog
То есть вывод аггрегированного количества файлов в директории и вложенных директориях до определённой глубины. Написал для этого однострочник:
find ~ -type f |perl -we 'my %h;while(<STDIN>){chomp;my$s=$ARGV[0]?-s$_:1||0;my@p;@_=split"/",$_,$ARGV[1]+2||4;pop@_;for(@_){push@p,$_;$h{join"/",@p}+=$s}};my$p;for my$k(sort{$a cmp$b}keys%h){$_=$k;for my$c(split"/",$p){$c||next;s#^/$c## or$_=$k and last};$_=("."x length$p).$_ if$_ ne$k;$p=$k;$p=~s#/[^/]*$##;printf"%-12i %s\n",$h{$k},$_}' 0 5
Работает, если первым параметром передать 1 то будет считать количество байт вместо количества файлов.

А был ли какой то путь попроще получить похожее стандартными средствами?

Ответ на: комментарий от AITap

Ага, до арча уже докатилось. В принципе если ограничивать глубину то в несколько итераций вполне решает задачу поиска самых жирных директорий

disarmer ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.