O que é certo para mostrar o uso da pasta em megabytes [closed]

5

Estou usando du -bs para contar o tamanho da pasta.

du -bs /folder

O resultado é 96342835 em Bytes ... assim, em MB é (/ 1024/1024) 91,87MB .

OK, mas quando eu uso

du -hs /folder

O resultado é diferente. 99MB Ou

 du -s taxikondrat.cz/

100980 KBytes = 98,61 MB

Eu tentei métodos diferentes. Em todos os casos, obtive resultados diferentes. Por exemplo,

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

Eu tenho 96059200 bytes, então 91,60MB

ls -ARgo "$@" | awk '{q += $3} END {print q}'

96338739 bytes, então 91,87 MB. Após o arredondamento ser o mesmo, mas em bytes pouco diferentes.

Como uma cereja no bolo é o Google :)

Então, o que é verdade? Por que essas diferenças e qual método é mais preciso?

    
por Pavel 20.08.2018 / 13:59

1 resposta

11

Você está comparando maçãs e laranjas.

Observe que ls -s fornecerá o tamanho de um arquivo com base no tamanho dos dados reais no arquivo.

Por padrão, o comando du fornecerá um uso de disco baseado em tamanho. Como o espaço em disco é alocado em blocos e os comprimentos dos arquivos quase nunca são múltiplos inteiros do tamanho do bloco, você acaba com um bloco que é parcialmente preenchido com dados, mas que não pode ser usado por outro arquivo. Em outras palavras, se o seu sistema de arquivos tiver um tamanho de bloco de 512 bytes, um arquivo com comprimento de 1 byte ocupará 512 bytes no disco, o mesmo que um arquivo de 511 bytes. Um arquivo de 513 bytes ocupará 2 blocos e 1024 bytes de espaço em disco.

A soma total dos usos do disco du file será quase sempre maior que a soma de ls -s file tamanhos de arquivo, especialmente quando você tem muitos (pequenos) arquivos e / ou tamanhos de bloco muito grandes.

Usar a opção du -b NÃO conta blocos, mas se comporta como ls -s :

-b equivalent to --apparent-size --block-size=1
--apparent-size
print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal frag‐ mentation, indirect blocks, and the like -h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)

du -sh converterá o número total de blocos em um formato legível, e du -bh imprimirá a soma dos tamanhos aparentes, em formato legível por humanos.

No meu Maildir, com muitos arquivos pequenos que diferem um pouco:

$ du -bs cur/
84088436    cur/
$ du -s cur/
91800   cur/
$ du -sh cur/
90M cur/
$ du -bh cur/
81M cur/

EDIT Com relação à conversão para saída legível e megabytes, por favor não negligencie toda a "polêmica" de legível em prefixos decimais SI versus múltiplos binários, poderes de 1000 contra potências de 1024.

Veja em segundo plano esta página: link sobre como utilitários GNU como ls e du exibem-nos.

O capital M em du -h output representa 1.048.576 bytes.

    
por 20.08.2018 / 14:17

Tags