Com este comando,
sudo du -csh *
você está perdendo diretórios ocultos, por exemplo, *
se expande para todos os nomes que começam com qualquer coisa, menos um ponto ( .
). Isso significa que todos os nomes de diretório que começam com um ponto não são passados para o comando du
e seu tamanho não é levado em conta.
Na maioria das situações, adicionar .??*
aos parâmetros atenderia às necessidades:
sudo du -csh .??* *
O .??*
extra está expandindo para todos os nomes que começam com um ponto e possuem mais de dois caracteres. O objetivo é excluir ..
, ou seja, o diretório pai dos argumentos.
Arquivos hipotéticos e diretórios como .a
ainda seriam perdidos, e aqueles que começassem com um traço ( -
) seriam, na melhor das hipóteses, ignorados e, na pior das hipóteses, acionariam um erro.
Se você tiver nomes de arquivos ou diretórios começando com um traço ou nomes começando com um ponto seguido por um único caractere, essa versão aprimorada informará corretamente todos os tamanhos de diretório:
sudo du -csh -- .[^.] .??* *
Aqui, o --
está dizendo du
para receber argumentos começando com um traço como nomes, não opções e .[^.]
adicionando aos nomes processados todos os arquivos e diretórios começando com um ponto seguido por qualquer caractere único, mas um ponto. Isso abrange todos os nomes possíveis de arquivos e diretórios.
Vários shells fornecem soluções personalizadas para esses problemas de nomenclatura:
bash
:
shopt -s dotglob
sudo du -csh -- *
zsh
:
sudo du -csh -- *(D)
ksh93
:
FIGNORE='@(.|..)'
sudo du -csh -- *