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.
David Barry
fonte
Duplicação entre sites: como obtenho o tamanho de um diretório na linha de comando?
22417 Peter Mortensen
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
Marcel Stimberg
fonte
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
geekQ
fonte
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 *
Brad
fonte
17

Desfrutar!

du foldername

Mais informações sobre esse comando aqui

myusuf3
fonte
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.)
αғsнιη
fonte
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
vivekyad4v
fonte
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
pdp
fonte
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
Shiv Singh
fonte
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.

Balaswamy vaddeman
fonte
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

Steven Penny
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.

kmario23
fonte
-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
Pacífica
fonte
6
dutem uma opção para isso:-s
muru