ti-enxame.com

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

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), Recebo apenas 4096 bytes, embora, ao todo, seja muito maior.

1142
Abdul Al Hazred

du -sh file_path

Explicação

  • O comando du (d isc sage) estima o uso do espaço file_path
  • 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
    
1585
sam

Basta usar o comando du:

du -sh -- *

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

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

df -h .
347
Pacifist

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 subpastas ocupam quanto espaço em disco ?! Você pode estender este comando para:

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

que fornecerá o tamanho de todas as subpastas (nível 1). A saída será classificada (maior pasta na parte superior).

212
Chrispie

du pode ser complicado de usar, pois você precisa passar 100 argumentos para obter uma saída decente. E descobrir o tamanho das pastas ocultas é ainda mais difícil.

Facilite sua vida e use ncdu.

ncdu

Você obtém resumos por pasta que são facilmente navegáveis.

77
Teque5

Outros já mencionaram du, mas também gostaria de mencionar Ncd - que é uma versão ncurses de du e fornece interatividade: Você pode explorar a hierarquia de diretórios diretamente e veja os tamanhos dos subdiretórios.

35
Tblue

O comando du mostra o uso do disco do arquivo.

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

du -h (file name)
28
jackotonye

Todos os exemplos acima informarão o tamanho dos dados em disco (ou seja, a quantidade de espaço em disco que um arquivo específico está usando, que geralmente é maior que o tamanho real do arquivo). Existem algumas situações em que isso não fornece um relatório preciso, se os dados não forem realmente armazenados nesse disco específico e existirem apenas referências de inode.

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

Se você quiser saber o tamanho real do arquivo, adicione a opção -b ao du.

du -csbh .
24
Andy Foster

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

# du -sh ./*
17
ConnerMan
df -h .; du -sh -- * | sort -hr

Isso mostra quanto espaço em disco resta na unidade atual e 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
16
mpen

I se este comando como root :

Sudo ls -1d */ | Sudo xargs -I{} du {} -sh && Sudo du -sh
10
Eduard Florinescu

encontre todos os arquivos no diretório atual recursivamente e resuma seu tamanho:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
10
Leon Chang

Aqui está uma função para suas .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
}

saída de amostra:

$ 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 subdiretórios:

$ dusort .
$ dusort /var/log/
10
feldversuch

Mais uma variante:

du -h --max-dep=1
9
0x8BADF00D

Aqui está um script POSIX que funcionará com:

  • Um arquivo
  • Arquivos
  • Um diretório
  • Diretórios
ls -A -R -g -o "[email protected]" | awk '{n1 += $3} END {print n1}'
7
Steven Penny

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

Se o sistema de arquivos for compactável, du poderá gerar 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, portanto, ocupam menos espaço na mídia do que apenas as informações não compactadas Eles contém. Mesmo se houver arquivos esparsos.

se houver links físicos no diretório, du também poderá imprimir um valor menor porque 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 Shell de uma linha pode ser usada (assumindo um 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

Apenas soma tamanhos de todos os arquivos que não são de diretório no diretório (e seus subdiretórios recursivamente) um por um. Observe que, para links simbólicos, ele informa o tamanho do link simbólico (não do arquivo apontado pelo link simbólico).

6
anton_rh

Você pode usar

du -sh directory/

e

du -sh filename

conhecer o espaço ocupado pela pasta ou arquivo.

df -h

mostrará o uso do disco no formato legível por humanos - h faz isso.

Há também um programa baseado em GUI chamado Disk Usage Analyzer.

6
arupgsh