quarta-feira, 7 de março de 2012

Listar ficheiros por ordem decrescente de tamanhos

Tenho muitas vezes problemas de falta de espaço em disco e preciso rapidamente de saber o que posso apagar.
Uma forma simples de listar os ficheiros de um diretório, ordenando-os por ordem decrescente de tamanhos, é:

$ ls -l| egrep -v "^d|total"| awk '{print $5, $NF}'| sort -nr| less

ls -l dá uma listagem longa de ficheiros, com colunas separados por whitespace (termo que designa carateres como espaço ou tabulador (\t)). O awk aceita outros carateres como separadores de colunas (via -F), mas aceita whitespace como separador por omissão.
$5 corresponde à 5ª coluna (tamanho de ficheiro) e $NF corresponde à última coluna (NF é number of fields).
egrep -v "^d|total" exclui (-v) linhas iniciadas com d (diretórios) ou com o texto total.

Esta linha pode naturalmente ser colocada num alias (em ~/.bashrc para shell Bash):

alias listar_dec='ls -l| egrep -v "^d|total"| awk "{ print \$5, \$NF }"| sort -nr| less'
Os carateres $ têm de ser "escapados" por terem significado simultaneamente para a shell e para o awk.

Depois de 'recarregar' o .bashrc (. ~/.bashrc), basta usar no diretório pretendido
$ listar_dec

Finalmente, o utilitário sort pode ser dispensado se ls for usado com a opção -S (ls -lS).

Sem comentários:

Enviar um comentário