Quando eu uso ls
ou du
, obtenho a quantidade de espaço em disco que cada arquivo está ocupando.
Preciso da soma total de todos os dados em arquivos e subdiretórios que obteria se abrisse cada arquivo e contasse os bytes. Pontos de bônus se eu conseguir sem abrir cada arquivo e contar.
ls
realmente mostra o número de bytes em cada arquivo, não a quantidade de espaço em disco. Isso é suficiente para suas necessidades?du
não pode ser usado para responder a esta pergunta. Mostra a quantidade de espaço em disco que o diretório ocupa no disco (os dados dos arquivos mais o tamanho da meta-informação do sistema de arquivos auxiliar). Adu
saída pode ser ainda menor do que o tamanho total de todos os arquivos. Isso pode acontecer se o sistema de arquivos puder armazenar dados compactados no disco ou se links físicos forem usados. As respostas corretas são baseadas emls
efind
. Veja as respostas de Nelson e bytepan aqui, ou esta resposta: unix.stackexchange.com/a/471061/152606Respostas:
Se você quiser o 'tamanho aparente' (que é o número de bytes em cada arquivo), não o tamanho ocupado pelos arquivos no disco, use a opção
-b
ou--bytes
(se você tiver um sistema Linux com GNU coreutils ):fonte
du -shb
(conforme sugerido por esta resposta), a-b
configuração parece substituir a-h
configuração.du -sh --apparent-size /dir/
Use
du -sb
:Opcionalmente, adicione a
h
opção para uma saída mais amigável:fonte
brew install coreutils
. Ele estará disponível como o comandogdu
.ls
->file.gz hardlink-to-file.gz
.stat -c %s file.gz
->9657212
.stat -c %s hardlink-to-file.gz
->9657212
.du -sb
->9661308
. Definitivamente, não é o tamanho total do conteúdo, mas o tamanho que o diretório ocupa no disco.cd para o diretório, então:
ftw!
Escreveu originalmente sobre isso aqui: https://ao.gl/get-the-total-size-of-all-the-files-in-a-directory/
fonte
-L
opção paradu
seguir os links simbólicos.Apenas uma alternativa:
grep -v '^d'
irá excluir os diretórios.fonte
ls -lR | grep '.png$' | awk '{total += $5} END {print "Total:", total/1024/1024, "MB"}'
du
desta solução realmente conta o tamanho total de todos os dados em arquivos como se eles fossem abertos um a um e seus bytes fossem contados. Mas sim, adicionar o-A
parâmetro também é necessário para contar arquivos ocultos.O formato "% s" do stat fornece o número real de bytes em um arquivo.
Sinta-se à vontade para substituir a soma dos números pelo seu método favorito .
fonte
find -print0
exargs -0
são necessários para nomes de arquivos com espaços. OS X querstat -f %z
.du
relatórios.)du
utilitário, esta resposta está correta. É muito semelhante à resposta aqui: unix.stackexchange.com/a/471061/152606 . Mas eu usaria em! -type d
vez de-type f
para contar links simbólicos também (o tamanho do link simbólico em si (geralmente alguns bytes), não o tamanho do arquivo para o qual ele aponta).Se você usar o "du" do busybox no sistema integrado, você não pode obter bytes exatos com du, apenas Kbytes que você pode obter.
fonte
Quando uma pasta é criada, muitos sistemas de arquivos Linux alocam 4096 bytes para armazenar alguns metadados sobre o próprio diretório. Esse espaço é aumentado em um múltiplo de 4096 bytes conforme o diretório cresce.
O comando du (com ou sem a opção -b) leva em conta este espaço , como você pode ver digitando:
você terá um resultado de 4096 bytes para um diretório vazio. Portanto, se você colocar 2 arquivos de 10.000 bytes dentro do dir, a quantidade total fornecida por du -sb será de 24096 bytes.
Se você ler atentamente a pergunta, não é isso que pergunta. O questionador perguntou:
que no exemplo acima deve ter 20.000 bytes, não 24096.
Portanto, a resposta correta IMHO poderia ser uma mistura de resposta de Nelson e sugestão hlovdal para lidar com nomes de arquivos contendo espaços:
fonte
Existem pelo menos três maneiras de obter a "soma total de todos os dados em arquivos e subdiretórios" em bytes que funcionam tanto no Linux / Unix quanto no Git Bash para Windows, listados abaixo da média mais rápida para a mais lenta. Para sua referência, eles foram executados na raiz de um sistema de arquivos bastante profundo (
docroot
em uma instalação do Magento 2 Enterprise compreendendo 71.158 arquivos em 30.027 diretórios).1
2
3 -
Esses dois também funcionam, mas dependem de comandos que não existem no Git Bash para Windows:
1
2
Se você quiser apenas o total do diretório atual, adicione
-maxdepth 1
afind
.Observe que algumas das soluções sugeridas não retornam resultados precisos, então eu preferiria as soluções acima.
fonte
dc
faz parte dobc
pacote, então para obtê-dc
lo é necessário instalarbc
.Para Win32 DOS, você pode:
c:> dir / sc: \ diretório \ que você \ deseja
e a penúltima linha informará quantos bytes os arquivos ocupam.
Eu sei que isso lê todos os arquivos e diretórios, mas funciona mais rápido em algumas situações.
fonte
du
é prático, masfind
é útil no caso de você desejar calcular o tamanho de alguns arquivos apenas (por exemplo, usando filtro por extensão). Observe também quefind
eles próprios podem imprimir o tamanho de cada arquivo em bytes. Para calcular o tamanho total, podemos conectar odc
comando da seguinte maneira:Aqui
find
gera sequência de comandos paradc
gosto123 + 456 + 11 +
. Embora o programa completo deva ser0 123 + 456 + 11 + p
(lembre-se da notação pós-fixada).Portanto, para obter o programa completo, precisamos colocá-lo
0
na pilha antes de executar a sequência de stdin e imprimir o número superior após a execução (op
comando no final). Conseguimos isso por meio dedc
opções:-e0
é apenas um atalho para-e '0'
colocar0
na pilha,-f-
é para ler e executar comandos de stdin (aquele gerado porfind
aqui),-ep
é para imprimir o resultado (-e 'p'
).Para imprimir o tamanho em MiB, como
284.06 MiB
podemos usar-e '2 k 1024 / 1024 / n [ MiB] p'
no ponto 3, em vez disso (a maioria dos espaços são opcionais).fonte
Isso pode ajudar:
O comando acima somará todos os arquivos deixando o tamanho dos diretórios.
fonte
-A
opção deve ser adicionada als
.Usar:
Onde <DIR> é o diretório que você deseja inspecionar.
O '-c' fornece dados do total geral que são extraídos usando a parte 'total grep' do comando, e a contagem em Kbytes é extraída com o comando awk.
A única advertência aqui é se você tiver um subdiretório contendo o texto "total", ele também será cuspido.
fonte