Você pode calcular você mesmo para o seu sistema com um comando simples
$ find /usr/share/man/ -type f -exec ls -S {} + 2>/dev/null | head | while \
read -r file; do printf "%-40s" "$file"; \
man "$file" 2>/dev/null | wc -lwm; done | sort -nrk 4
que retorna na minha caixa
(file) (lines) (words) (chars)
/usr/share/man/man1/zshall.1.bz2 27017 186394 1688174
/usr/share/man/man1/cmake.1.bz2 22477 106148 1004288
/usr/share/man/man1/cmake-gui.1.bz2 21362 100055 951110
/usr/share/man/man1/perltoc.1.bz2 18179 59783 780134
/usr/share/man/man1/cpack.1.bz2 9694 48264 458528
/usr/share/man/man1/cmakemodules.1.bz2 10637 42022 419127
/usr/share/man/man5/smb.conf.5.bz2 8306 49991 404190
/usr/share/man/man1/perlapi.1.bz2 8548 43873 387237
/usr/share/man/man1/perldiag.1.bz2 5662 37910 276778
/usr/share/man/e 1518 5919 58630
onde as colunas representam o número de linhas, palavras e caracteres, respectivamente. Linhas (comandos) são classificadas pela última coluna.
Podemos fazer coisas semelhantes para páginas de informações, mas temos que ter em mente que o conteúdo pode abranger muitos arquivos. Assim, vamos usar os benefícios de zsh
para manter acima do one-liner de forma compacta:
$ for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do \
printf "%-40s" "$inf"; \
info "$inf" 2>/dev/null | wc -lwm; done | sort -nrk 4
o que dá
(info title) (lines) (words) (chars)
elisp 72925 457537 3379403
libc 69813 411216 3066817
lispref 62753 374938 2806412
emacs 47507 322194 2291425
calc 33716 244394 1680763
internals 32221 219772 1549305
zsh 34932 206851 1544909
gsl-ref 32493 179954 1518248
gnus 31723 180613 1405064
gawk 27150 167135 1203395
xemacs 25734 170403 1184250
As páginas de informações são enormes principalmente para coisas relacionadas ao gnu, o que é compreensível, mas acho interessante que, por exemplo, o zsh tenha mais linhas e palavras, mas menos caracteres do que nas man pages. É interessante porque, à primeira vista, o conteúdo é o mesmo, apenas a formatação é um pouco diferente.
Explicação dos truques zsh na seleção dos arquivos para o loop: for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do
O objetivo é criar a lista de nomes de arquivos exclusivos no diretório / usr / share / info e em todos os subdiretórios. Os arquivos devem ser retirados de dirname, extenstions e todos os números. O snippet acima pode ser reescrito como ${(u)$(echo /usr/share/info/**/*(.)):t:r:r}
, o que dá o mesmo resultado, mas usa uma sintaxe provavelmente mais decente, a saber:
-
**/*
: descida em todos os subdiretórios e marcar tudo lá -
(.)
: selecione apenas arquivos simples -
:t
: remova componentes do nome do caminho (funciona comobasename
) -
:r
: remove a extensão (tudo depois do último ponto, incluindo o ponto). Ele é aplicado duas vezes para remover também a sequência e o número desnecessários (por exemplo,.info-6
do arquivozsh.info-6.bz2
) -
(u)
: mostra apenas palavras únicas (após as operações anteriores, existem muitas as mesmas palavras - diferentes arquivos / capítulos para o mesmo comando info)