Como encontrar recursivamente a quantidade armazenada no diretório?

106

Eu sei que você pode ver o tamanho do byte de um arquivo quando faz uma longa listagem com ll ou ls -l . Mas eu quero saber quanto armazenamento está em um diretório incluindo os arquivos dentro desse diretório e os subdiretórios dentro dele, etc. Eu não quero o número de arquivos, mas sim a quantidade de armazenamento que esses arquivos ocupam.

Então, eu quero saber quanto armazenamento está em um determinado diretório recursivamente? Eu estou supondo, se houver um comando, que seria em bytes.

    
por Rob Avery IV 13.03.2013 / 17:13

8 respostas

115

Tente fazer isso:

du -s dir

ou

du -sh dir

precisa de -h support, depende do seu SO.

Veja

man du
    
por 13.03.2013 / 17:18
24

Você acabou de fazer:

du -sh /path/to/directory

onde -s é para resumo e -h para legível por humanos (não padrão opção).

Cuidado no entanto, ao contrário de ls , isso não mostrará tamanho do arquivo , mas uso do disco (ou seja, um múltiplo do tamanho do bloco do sistema de arquivos), mas o arquivo pode ser menor ou até maior, então você pode usar a opção --apparent-size :

du -sh --apparent-size /path/to/directory

Esse é o tamanho que seria transferido pela rede se você tivesse que fazer isso.

Na verdade, o arquivo pode ter "buracos" (vazio), pode ser menor que o tamanho do bloco do sistema de arquivos, pode ser compactado no nível do sistema de arquivos, etc. A página man explica isto.

Como Nicklas pontos , você também pode usar o analisador de uso de disco ncdu . Lançado de dentro de um diretório, ele mostrará quais pastas e arquivos utilizam espaço em disco, ordenando-os de maior a menor.

Você pode ver esta pergunta também.

    
por 13.03.2013 / 19:06
13

Observe que, se você quiser conhecer o tamanho de todas as {sub} pastas dentro de um diretório, também poderá usar a opção -d ou --max-depth de du (que recebe um argumento: o limite recursivo)

Por exemplo:

du -h /path/to/directory -d 1

mostrará algo como

4.0K /path/to/directory/folder1
16M  /path/to/directory/folder2
2.4G /path/to/directory/folder3
68M  /path/to/directory/folder4
8G   /path/to/directory/folder5

PS: inserir 0 como o limite recursivo é equivalente à opção -s . Esses 2 comandos lhe darão o mesmo resultado (o seu tamanho recursivo de legível humano em um determinado diretório):

du -h /path/to/directory -d 0
du -sh /path/to/directory
    
por 19.05.2015 / 11:53
11

Uma alternativa ao já mencionado comando du seria ncdu , que é um bom analisador de uso de disco para uso no terminal. Você pode precisar instalá-lo primeiro, mas está disponível na maioria dos repositórios de pacotes.

Editar: para o formato de saída, veja essas capturas de tela link

    
por 13.03.2013 / 23:02
8

Isso lhe dará uma lista de tamanhos do diretório atual, incluindo pastas (recursivas) e arquivos.

$ du -hs *
7.5M    Applications
9.7M    Desktop
 85M    Documents
 16K    Downloads
 12G    Google Drive
 52G    Library
342M    Movies
8.3M    Music
780M    Pictures
8.5G    Projects
8.0K    Public
 16K    client1.txt
    
por 19.10.2017 / 11:35
3

No Unix, um diretório contém apenas nomes e referências a objetos do sistema de arquivos (inodes, que podem se referir a diretórios, arquivos ou outras coisas exóticas). Um arquivo pode aparecer sob vários nomes no mesmo diretório ou ser listado em vários diretórios. Então, "espaço usado pelo diretório e pelos arquivos dentro dele" não faz sentido, já que os arquivos não estão "dentro".

Dito isto, o comando du(1) lista o espaço usado por um diretório e todo o que é alcançável através dele, du -s fornece um resumo, com -h algumas implementações como GNU du fornecem resultados "legíveis por humanos" (ou seja, kilobyte, megabyte).

    
por 13.03.2013 / 17:25
0

Para mim, funcionou de trás para frente no caso da profundidade e do caminho em um OS X El Capitán

du -h -d 1 /path/to/directory
    
por 07.08.2016 / 00:53
0

Você pode usar "file-size.sh" na biblioteca awk Velour :

ls -ARgo "$@" | awk '{q += $3} END {print q}'
    
por 30.03.2017 / 02:49