Como obter o tamanho físico de um arquivo no Linux?

6

Eu posso usar ls -l para obter o tamanho lógico de um arquivo, mas existe uma maneira de obter o tamanho físico de um arquivo?

    
por user285003 08.04.2018 / 11:26

2 respostas

18

ls -l fornecerá o tamanho aparente do arquivo, que é o número de bytes que um programa lerá se ler o arquivo do início ao fim. du lhe daria o tamanho do arquivo "no disco".

Por padrão, du fornece o tamanho do arquivo em número de blocos de disco, mas você pode usar -h para obter uma unidade legível por humanos. Veja também o manual para du em seu sistema.

Note que com o du do GNU coreutil (que é provavelmente o que você tem no Linux), usar -b para obter bytes implica na opção --apparent-size . Não é isso que você deseja usar para obter o número de bytes. Em vez disso, use --block-size=1 ou -B 1 .

Com o GNU ls , você também pode fazer ls -s --block-size=1 no arquivo. Isso dará o mesmo número que du -B 1 para o arquivo.

Exemplo:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

Isso significa que este é um arquivo de 512 MB que leva cerca de 24 KB em disco. É um arquivo escasso (principalmente zeros que não são realmente gravados no disco, mas representados como "buracos" lógicos no arquivo). Arquivos esparsos são comuns quando se trabalha com arquivos grandes pré-alocados, por exemplo, imagens de disco para máquinas virtuais, etc. Criar um arquivo esparso é rápido, enquanto preenchê-lo com zeros é lento (e desnecessário).

Veja também o manual de fallocate em seu sistema Linux.

    
por 08.04.2018 / 11:36
0

Eu obtenho o tamanho do arquivo em bytes assim:

actualsize=$(du -b "${file}" | cut -f 1)
    
por 14.04.2018 / 16:59

Tags