Como determino o tamanho total de um diretório (pasta) na linha de comando?


786

Existe um comando simples para exibir o tamanho total agregado (uso do disco) de todos os arquivos em um diretório (pasta)?

Eu tentei isso e eles não fazem o que eu quero:

  • ls -l, que exibe apenas o tamanho dos arquivos individuais em um diretório, nem
  • df -h, que exibe apenas o espaço livre e usado em meus discos.



Lembrete amigável de que pode fazer quase zero sentido em sistemas de arquivos CoW como o BTRFS.
— val

Respostas:


1266

O comando du"resume o uso do disco de cada FILE, recursivamente para diretórios", por exemplo,

du -hs /path/to/directory
  • -hé obter os números "legíveis por humanos", por exemplo, obter em 140Mvez de 143260(tamanho em KBytes)
  • -sé para resumo (caso contrário, você obterá não apenas o tamanho da pasta, mas também tudo o que estiver na pasta separadamente)

Enquanto você estiver usando, -hvocê pode classificar os valores legíveis por humanos usando

du -h | sort -h

O -hsinalizador sortativado considerará os valores de tamanho "Legível por humanos".


Se desejar evitar listar recursivamente todos os arquivos e diretórios, você pode fornecer o --max-depthparâmetro para limitar quantos itens são exibidos. Mais comumente,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
respeito por ir além. :)
— myusuf3

93
Eu uso du -shou DOOSH como uma forma de lembrar (NOTA: o comando é o mesmo, apenas a organização de bandeiras de linha de comando para fins de memória)
— Marco Ceppi

3
Existe uma opção útil para você chamar o tamanho --apparent. Ele pode ser usado para encontrar o tamanho real de um arquivo ou diretório (em oposição à sua pegada no disco), por exemplo, um arquivo de texto com apenas 4 caracteres ocupará cerca de 6 bytes, mas continuará aparecendo com ~ 4K em uma saída du -sh regular. No entanto, se você passar na opção --apparent-size, a saída será 6. man du diz: --apparent size size - tamanho aparente da impressão, em vez do uso do disco; embora o tamanho aparente é geralmente menor, pode ser maior devido a buracos em ( '') esparso arquivos, fragmentação interna, blocos indirectos
— Hopping coelho

4
Isso funciona para o OS X também! Obrigado, eu estava realmente procurando uma maneira de limpar arquivos, tanto na minha máquina local quanto no meu servidor, mas os métodos automatizados pareciam não funcionar. Então, eu corri du -hs *e entrei no diretório maior e descobri quais arquivos eram tão grandes ... Esse é um método tão bom, e a melhor parte é que você não precisa instalar nada! Definitivamente merecia o meu upvote
— Dev

@BandaMuhammadAlHelal Acho que há duas razões: arredondamento ( dupossui um arredondamento um tanto peculiar, sem decimais se o valor tiver mais de um dígito na unidade escolhida) e a questão clássica do prefixo 1024 vs. 1000 . dutem uma opção -B(ou --block-size) para alterar as unidades nas quais ele exibe valores ou você pode usar em -bvez de -hobter o valor "bruto" em bytes.
— Marcel Stimberg

164

Recentemente, encontrei uma ótima ferramenta interativa baseada em ncurses, que rapidamente fornece uma visão geral sobre tamanhos de diretório. Pesquisou por esse tipo de ferramenta por anos.

  • pesquisar rapidamente através da hierarquia de arquivos
  • você pode excluir, por exemplo, arquivos temporários enormes de dentro da ferramenta
  • Extremamente rápido

Pense nisso como um baobab para a linha de comando:

apt-get install ncdu

11
Isso é absolutamente fantástico! Como DaisyDisk, para OSX
— subZero

3
ncdué incrível! Após a instalação, faça isso ncdu /. Você encontrará rapidamente os maiores arquivos do sistema. Também pressione henquanto estiver dentro da interface do console do ncdu. Tem atalhos muito úteis
— Vlad-ardelean

Isto é EXATAMENTE o que eu precisava: tão simples, tão eficiente. Amor puro.
— user3790897

52

Ele encontra o tamanho recursivamente e o coloca ao lado do nome de cada pasta, junto com o tamanho total na parte inferior, tudo no formato humano

du -hsc *

17

Desfrutar!

du foldername

Mais informações sobre esse comando aqui


10

tree é outro comando útil para este trabalho:

Basta instalá-lo via sudo apt-get install treee digite o seguinte:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Da árvore do homem :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

Abaixo está o que estou usando para imprimir o tamanho total, pasta e arquivo:

$ du -sch /home/vivek/* | sort -rh

Detalhes

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Resultado

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

As respostas tornaram óbvio que dué a ferramenta para encontrar o tamanho total de um diretório. No entanto, existem alguns fatores a serem considerados:

  • Ocasionalmente, a dusaída pode ser enganosa porque relata o espaço alocado pelo sistema de arquivos, que pode ser diferente da soma dos tamanhos dos arquivos individuais. Normalmente, o sistema de arquivos alocará 4096 bytes para um arquivo, mesmo que você tenha armazenado apenas um caractere!

  • Diferenças de saída devido a potência de 2 e potência de 10 unidades. A -hopção para dudivide o número de bytes por 2 ^ 10 (1024), 2 ^ 20 (1048576) etc. para fornecer uma saída legível por humanos. Muitas pessoas podem estar mais acostumadas a ver potências de 10 (por exemplo, 1K = 1000, 1M = 1000000) e se surpreender com o resultado.

Para encontrar a soma total dos tamanhos de todos os arquivos em um diretório, em bytes, faça:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Exemplo:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

O find-ls-awk retornará um valor incorreto para as pastas grandes nº 1 . Para o awk mais recente, você pode adicionar --bignumou -M; se isso não for uma opção, use find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
— goozez

Se potências de 2 a ser utilizado é um problema, há a --siopção: "como -h, mas use poderes de 1000 não 1024"
— Muru

1

Para apenas o tamanho do diretório em um formato legível, use o abaixo:

du -hs directoryname

Provavelmente, isso não está na seção correta, mas na linha de comando, você pode tentar:

ls -sh filename

O -stamanho é e o -hlegível por humanos.

Use -lpara mostrar na lslista, como abaixo:

ls -shl

0

du /foldernameé o comando padrão para saber o tamanho de uma pasta. É uma prática recomendada encontrar as opções lendo a página de manual:

man du

Você deve ler a página do manual (disponível on - line ) antes de usar o comando.


0

Aqui está um script POSIX que funcionará com:

  • Um arquivo
  • arquivos
  • Um diretório
  • Diretórios
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Fonte


0

Se o diretório desejado tiver muitos subdiretórios, use o seguinte:

$ cd ~/your/target/directory
$ du -csh 

-c, --total produz um total geral
-s, --summarize exibe apenas um total para cada argumento
-h, - tamanhos de impressão legíveis por humanos em formato legível por humanos (por exemplo, 1K 234M 2G)

que produziria um total geral do uso de memória por todos os arquivos / pastas no diretório atual.


-1

O melhor que eu acho é o seguinte:

du -h directory_name | tail -n1

Isso mostrará apenas o tamanho do diretório em que você está interessado e não imprimirá tamanhos de nenhum diretório e arquivo dentro desse diretório.

Devo acrescentar que, se o tamanho da pasta for grande, o du leva mais tempo. Você deve ser paciente para que este comando funcione. Assim como qualquer outro comando unix, você pode descobrir o tempo total para esse processo usando timeantes deste comando:

time du -h directory_name | tail -n1

6
dutem uma opção para isso:-s
— muru
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.