Por que isso não mostra os arquivos / pastas ocultos?

140

Eu estava olhando através do meu sistema du -sch ./*para encontrar os grandes arquivos inúteis que posso ter armazenado sem motivo, quando descobri isso:

$ du -sch ./*
du: cannot read directory ‘./drbunsen/.gvfs’: Permission denied
du: cannot read directory ‘./drbunsen/.cache/dconf’: Permission denied
18G ./drbunsen
18G total

$ cd drbunsen/
$ du -sch ./*
601M ./Desktop
20K ./Documents
598M ./Downloads
4.0K ./flash
4.0K ./Music
8.0M ./Pictures
4.0K ./Public
4.0K ./Templates
4.0K ./Ubuntu One
8.0K ./Videos
11G ./VirtualBox VMs
6.9M ./workspace
12G total

Como faço para tornar os arquivos ocultos visíveis? du -sch ./.*dá o mesmo resultado que du -sch ./*.

Dr_Bunsen
fonte
du -hs .[^.]* *para todos os arquivos ocultos, excluindo . e ..quais outras respostas parecem estar ausentes.
laggingreflex

Respostas:

245

Usar

du -sch .[!.]* * |sort -h

na sua pasta pessoal.

Como alternativa, o comando que eu uso com mais frequência é

ncdu

Fácil de instalar, se necessário:

sudo apt-get install ncdu
don.joey
fonte
1
Obrigado, você é um gênio. Eu não sou mestre em bash, o que faz [!.]?
Dr_Bunsen
10
@Dr_Bunsen: É uma glob que lista todos os arquivos que começam com um único .. Aqui está um truque: se você não sabe o que uma coisa de aparência global faz, tente correr echo .[!.]*ou o que quer. O shell expandirá a glob e a passará echo, imprimindo a lista de arquivos resultantes.
Tikhon Jelvis
14
Isso falha ao listar arquivos com o nome like ..fooe pode causar problemas com arquivos cujo nome começa com -. Também pode falhar se a lista de argumentos for muito longa. du -ahd1não teria nenhum desses problemas.
Stéphane Chazelas
Irrelevante para a questão original, mas relevantes para o dia a dia de uso: Pode ser útil incluir switch 'c' para exibir o total e para reordenar as opções um pouco para fazer esse comando um pouco mais fácil de lembrar: du -cksh .[!.]* * |sort -h.
Daddy32
56

Eu tenho a mesma pergunta na lista de discussão do coreutils, porque era difícil para mim lembrar desse comando estranho do @ don.joey. E Bob Proulx propôs um comando melhor e mais natural: du -ahd1 | sort -h

Se você deseja listar todos os arquivos no diretório atual, use '.' ou não apresente nenhum argumento de arquivo. Você também pode usar a opção -d, --max-depth = N.

Tente o seguinte:

du -hd1

Yurii Kolesnykov
fonte
7
Adicione a -aopção para que seja equivalente.
Stéphane Chazelas
6
Essa deve ser a resposta aceita, porque é mais simples e fácil de lembrar e entender.
Bastien
8

Quando você executa o mesmo comando dentro do diretório, ele não inclui os arquivos ocultos iniciados .na contagem. Se você tem o Steam, por exemplo, instalado, o padrão é instalar jogos ~/.local/share/Steam/e ele próprio também é instalado lá.

Aparentemente, sob o bash, você precisa executar du -sch .[!.]* *, pois não expande adequadamente a .*glob. Sob zshou outros shells, du -sch * .*deve funcionar, como .*deve ser expandido para incluir a lista de todos os arquivos ocultos no diretório atual.

dobey
fonte
ESTÁ BEM. Aparentemente, há um problema com o bash, pois ele não parece se expandir adequadamente .*. Mas du -sch * .*faz a coisa correta abaixo zsh. Em bash, du -sch .*parece contar, .mas não se expande para mostrar arquivos individualmente.
Dobey #
Para mim. * Também se expande para ../* e, portanto, du sai do diretório que eu quero ver o seu tamanho! Eu tive que usar ./.
Ari #
É o zsh e todas as conchas derivadas do shell Forsyth (hoje em dia são apenas pdksh e seus derivados) que fazem a coisa certa e não se expandem. e aqui. Todas as outras conchas semelhantes a Bourne fazem (bash, Bourne, AT&T ksh, dash, yash ...). Em zsh, você usaria du -sch -- *(D), porém, não du -sch -- * .*.
Stéphane Chazelas