Como obtenho o tamanho de um diretório na linha de comando?

890

Eu tentei obter o tamanho de um diretório (contendo diretórios e subdiretórios) usando o comando ls com a opção l . Parece funcionar para arquivos ( ls -l file name ), mas se eu tentar obter o tamanho de um diretório (por exemplo, ls -l /home ), obtenho apenas 4096 bytes, embora seja muito maior.

    
por Abdul Al Hazred 19.02.2015 / 18:21

16 respostas

1268

du -sh file_path

Explicação

  • Estimativas do comando du ( d isc u sage) file_path space usage
  • As opções -sh são (de man du ):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Para verificar mais de um diretório e ver o total, use du -sch :

      -c, --total
             produce a grand total
    
por 19.02.2015 / 18:23
282

Basta usar o comando du :

du -sh -- *

fornecerá o uso cumulativo de todos os diretórios, arquivos, etc, não ocultos no diretório atual, em formato legível.

Você pode usar o comando df para saber o espaço livre no sistema de arquivos que contém o diretório:

df -h .
    
por 19.02.2015 / 19:30
156

du é seu amigo. Se você quer apenas saber o tamanho total de um diretório, entre nele e execute:

du -hs

Se você também gostaria de saber quais sub-pastas ocupam quanto espaço em disco ?! Você poderia estender este comando para:

du -h --max-depth=1 | sort -hr

que lhe dará o tamanho de todas as subpastas (nível 1). A saída será classificada (a maior pasta no topo).

    
por 19.02.2015 / 18:32
41

du pode ser complicado de usar, já que você precisa passar 100 argumentos para obter resultados decentes. E descobrir o tamanho das pastas ocultas é ainda mais difícil.

Facilite sua vida e use ncdu .

Você recebe resumos por pasta que podem ser facilmente pesquisados.

    
por 06.02.2017 / 06:39
29

Outros mencionaram du , mas eu também gostaria de mencionar Ncdu - que é uma versão ncurses do du e fornece interatividade: você pode explorar diretamente a hierarquia de diretórios e ver os tamanhos dos subdiretórios.

    
por 19.02.2015 / 23:41
24

O comando du mostra o uso do disco no arquivo.

A opção -h mostra resultados em formato legível (por exemplo, 4k, 5M, 3G).

du -h (file name)
    
por 19.02.2015 / 19:20
19

Todos os exemplos acima lhe dirão o tamanho dos dados no disco (ou seja, a quantidade de espaço em disco que um determinado arquivo está usando, que geralmente é maior que o tamanho real do arquivo). Existem algumas situações em que elas não fornecem um relatório preciso, se os dados não estiverem realmente armazenados nesse disco em particular e apenas referências de inode existirem.

No seu exemplo, você usou ls -l em um único arquivo, o qual terá retornado o tamanho real do arquivo, NÃO o seu tamanho no disco.

Se você quiser saber os tamanhos reais dos arquivos, adicione a opção -b ao du.

du -csbh .
    
por 23.05.2016 / 15:41
12

pessoalmente, acho que isso é melhor, se você não quiser usar ncdu

# du -sh ./*
    
por 19.02.2016 / 17:46
10
df -h .; du -sh -- * | sort -hr

Isso mostra quanto espaço em disco você deixou na unidade atual e, em seguida, informa quanto cada arquivo / diretório ocupa. por exemplo,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json
    
por 02.03.2016 / 00:09
7

Eu usam este comando como root :

sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh
    
por 24.10.2015 / 00:43
6

encontre todos os arquivos no diretório atual recursivamente e some o tamanho deles:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
    
por 06.12.2016 / 13:53
6

Aqui está uma função para o seu .bash_aliases

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

exemplo de saída:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

para subdirecionamentos:

$ dusort .
$ dusort /var/log/
    
por 08.01.2017 / 23:28
3

Mais uma variante:

du -h --max-dep=1
    
por 03.11.2016 / 22:24
3

Você pode usar

du -sh directory/

e

du -sh filename

para conhecer o espaço ocupado pela pasta ou arquivo.

df -h

mostrará o uso do disco em formato legível humano -h faz isso.

Existe também um programa baseado em gui chamado Disk Usage Analyzer .

    
por 06.02.2017 / 08:25
3

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}'

Origem

    
por 10.03.2017 / 06:50
2

Observe que du imprime o espaço que um diretório ocupa na mídia, que geralmente é maior do que o tamanho total de todos os arquivos no diretório, porque du leva em conta o tamanho de todas as informações auxiliares armazenadas na mídia para organizar o diretório em conformidade com o formato do sistema de arquivos.

Se o sistema de arquivos for compactável, du poderá produzir um número ainda menor que o tamanho total de todos os arquivos, porque os arquivos podem ser compactados internamente pelo sistema de arquivos e ocupam menos espaço na mídia do que apenas informações não compactadas Eles contém. O mesmo se houver arquivos esparsos.

se houver links físicos no diretório, então du poderá imprimir um valor menor, pois vários arquivos diferentes no diretório referem os mesmos dados na mídia.

Para obter o tamanho total direto de todos os arquivos no diretório, a seguinte expressão de shell de uma linha pode ser usada (assumindo um sistema GNU):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

ou ainda mais curto:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Soma apenas os tamanhos de todos os arquivos não-diretório no diretório (e seus subdiretórios recursivamente) um por um. Note que para links simbólicos, ele relata o tamanho do symlink (não do arquivo para o qual o link simbólico aponta).

    
por 24.09.2018 / 13:38