Como faço para determinar o tamanho total de um diretório (pasta) da linha de comando?

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

Eu tentei estes, 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.

Comando du "resume o uso do disco de cada arquivo, recursivamente para diretórios", por exemplo.,

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

Como você está usando -h você pode classificar os valores legíveis por humanos usando

du -h | sort -h

O -h bandeira em sort considerará valores de tamanho "legíveis por humanos".


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

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

Recentemente, encontrei uma ótima ferramenta interativa baseada em ncurses, que rapidamente oferece uma visão geral sobre os tamanhos dos diretórios. Procurei por esse tipo de ferramenta por anos.

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

Pense nisso como embondeiro para a linha de comando:

apt-get install ncdu

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

du -hsc *

Aproveite!

du foldername

Mais informações sobre esse comando aqui

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

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

Informacao

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

Saida

 70M    total 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

tree é outro comando útil para este trabalho:

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

tree --du -h /path/to/directory......33.7M used in 0 directories, 25 files

De homem árvore:

-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.)

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, du a saí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 se você armazenou apenas um caractere nele!

  • Diferenças de saída devido à potência de 2 e potência de 10 unidades. O -h alternar du divide o número de bytes por 2^10 (1024), 2^20 (1048576) etc para dar uma saída legível por humanos. Muitas pessoas podem estar mais habituadas a ver poderes de 10 (por exemplo, 1K = 1000, 1M = 1000000) E se surpreender com o resultado.

Para encontrar a soma total de 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 1255729664$ find .  -ls | awk '{sum += $7} END {print sum}'249008169

Você pode usar a poeira da ferramenta:

PS C:\git> dust   0B       ┌── templates           │                                      █ │   0%   0B     ┌─┴ git-core              │                                      █ │   0%   0B   ┌─┴ share                   │                                      █ │   0%  76B   ├── readme.md               │                                      █ │   0% 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2% 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42% 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56% 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100% 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100% 6.5M ┌─┴ .                         │███████████████████████████████████████ │ 100%

Meu exemplo é do Windows, mas Linux e Apple também são suportados:

https://github.com/bootandy/dust

Estou condicionado ao ll comando que é aliased para ls -alF. Está faltando apenas uma contagem de arquivos e tamanho dos arquivos na parte inferior. Eu joguei com du e tree mas não consegui obter os totais que eu precisava. Então eu criei lll para fazer isso por mim.

Em seu ~/.bashrc coloque o seguinte:

lll () {    ls -alF "$@"    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))    printf " \33[1;31m ${arr[0]}\33[m line(s).  "    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"}

Salve o arquivo e resource-lo usando . ~/.bashrc (ou você pode reiniciar seu terminal).


Saída da amostra

A coisa boa sobre ll a saída é que são cores. Isso é mantido com lll mas perdido ao usar find ou du:

lll sample output.png


TL; DR

Uma função de bônus que você pode adicionar a ~/.bashrc é chamado BytesToHuman(). Isso faz o que a maioria dos usuários de console esperaria converter grandes números em MiB, GiB, etc:

function BytesToHuman() {    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254    read StdIn    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)    while ((b > 1024)); do        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"        b=$((b / 1024))        let s++    done    echo "$b$d ${S[$s]}"} # BytesToHuman ()

Em seguida, vire o comentário entre duas linhas em lll () função para se parecer com isso:

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

Agora sua saída se parece com isso:

lll sample output 2.png

Como sempre, não se esqueça de re-fonte com . ~/.bashrc sempre que fizer alterações. (Ou reinicie o terminal, é claro)

PS - duas semanas em auto-quarentena finalmente me deram tempo para trabalhar neste objetivo de cinco anos.

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 do manual:

man du

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

Lembrete amigável de que pode fazer quase zero sentido no sistema de arquivos CoW como BTRFS.