Descobri que não é fácil conseguir o tamanho de um diretório no Bash?
Eu quero que, quando eu digitar ls -<some options>
, ele possa listar toda a soma do tamanho do arquivo do diretório recursivamente e arquivos ao mesmo tempo e classificar por ordem de tamanho.
Isso é possível?
du
é a resposta.du
comando @KeithThompson @KitHo estima o uso do espaço no arquivo, portanto, você não pode usá-lo se quiser obter o tamanho exato.du
(pelo menos a versão GNU coreutils) provavelmente tem uma opção para fornecer as informações.Respostas:
Basta navegar até o diretório e executar o seguinte comando:
OU adicione -h para tamanhos legíveis por humanos e -r para imprimir diretórios / arquivos maiores primeiro.
fonte
du -h
requersort -h
também, para garantir que, digamos981M
tipos antes1.3G
; comsort -n
apenas os números seriam levados em consideração e eles estariam ao contrário.-a
e usar em--all
vez de--max-depth=1
assimdu -a -h --all | sort -h
sort -h
só funciona na versão GNU / Linux, sem sorte com BSD / OS X.Aparentemente, a
--max-depth
opção não está na versão do Mac OS X dodu
comando. Você pode usar o seguinte.du -h -d 1 | sort -n
fonte
(isso não mostrará arquivos ocultos (.dotfiles))
Use
du -sm
para unidades Mb etc. Eu sempre usoporque a linha total (
-c
) terminará na parte inferior por razões óbvias :)PS:
fonte
du --max-depth=1|sort -n
oufind . -mindepth 1 -maxdepth 1|xargs du -s|sort -n
para incluir dotfiles também.find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 du -s | sort -n
se alguns dos caminhos encontrados puderem conter espaços.sudo du -smch * | sort -h | tail
Comando
Resultado
Explicação
du
exibe "uso de disco"h
é para "legível por humanos" (ambos, in sort e in du)max-depth=0
significadu
que não mostrará os tamanhos das subpastas (remova isso se quiser mostrar todos os tamanhos de cada arquivo em cada sub-, subsub-, ..., pasta)r
é para "reverso" (o maior arquivo primeiro)ncdu
Quando cheguei a esta pergunta, queria limpar meu sistema de arquivos. A ferramenta de linha de comando
ncdu
é muito mais adequada para essa tarefa.Instalação no Ubuntu:
Uso:
Basta digitar
ncdu [path]
na linha de comando. Após alguns segundos para analisar o caminho, você verá algo assim:Exclua o elemento atualmente destacado com d, saia com CTRL+c
fonte
ls -S
classifica por tamanho. Então, para mostrar o tamanho também,ls -lS
fornece uma exibição longa (-l
), classificada por tamanho (-S
). Eu costumo adicionar-h
também, para tornar as coisas mais fáceis de ler, entãols -lhS
,.fonte
du
, parece que alguém postou. @sehe: Depende da sua definição de real - mostra a quantidade de espaço que o diretório está usando para se armazenar. (Não é apenas adicionar o tamanho das subentradas.) Não é um número aleatório e nem sempre é 4KiB.Simples e rápido:
* requer GNU Parallel .
fonte
Acho que descobri o que você quer fazer. Isso fornecerá uma lista classificada de todos os arquivos e todos os diretórios, classificados por tamanho de arquivo e tamanho do conteúdo nos diretórios.
fonte
du
seja uma opção, vai te dar apenas um resultado aproximado.[versão aprimorada]
Isso será muito mais rápido e preciso do que a versão inicial abaixo e produzirá a soma de todos os tamanhos de arquivo do diretório atual:
o
stat -c %s
comando em um arquivo retornará seu tamanho em bytes. Otr
comando aqui é usado para superar asxargs
limitações do comando (aparentemente o direcionamento paraxargs
está dividindo os resultados em mais linhas, quebrando a lógica do meu comando). Portanto,tr
está tomando o cuidado de substituir o avanço de linha pelo+
sinal (mais).sed
tem o único objetivo de remover o último+
sinal da string resultante para evitar reclamações dobc
comando final (calculadora básica) que, como de costume, faz as contas.Performances: Eu testei em vários diretórios e mais de ~ 150.000 arquivos no topo (o número atual de arquivos do meu fedora 15) tendo o que eu acredito ser um resultado incrível:
Apenas no caso de você querer fazer uma comparação com o
du -sb /
comando, ele irá mostrar uma estimativa de uso do disco em bytes (-b
opção)Como eu esperava, é um pouco maior do que o cálculo do meu comando porque o
du
utilitário retorna o espaço alocado de cada arquivo e não o espaço real consumido.[versão inicial]
Você não pode usar o
du
comando se precisar saber a soma exata do tamanho da sua pasta porque (conforme citação da página do manual)du
estima o uso do espaço no arquivo. Portanto, isso o levará a um resultado errado, uma aproximação (talvez perto do tamanho da soma, mas muito provavelmente maior do que o tamanho real que você está procurando).Acho que pode haver maneiras diferentes de responder à sua pergunta, mas esta é a minha:
Ele encontra todos os arquivos em. (mude. com o diretório que desejar), também os arquivos ocultos são incluídos e (usando
xargs
) exibe seus nomes em uma única linha e, em seguida, produz uma lista detalhada usandols -l
. Essa (às vezes) grande saída é direcionada para o comando cut e apenas o quinto campo (-f5
), que é o tamanho do arquivo em bytes, é obtido e novamente direcionado para oxargs
qual produz novamente uma única linha de tamanhos separados por espaços em branco. Agora faça uma mágica sed que substitui cada espaço em branco por um+
sinal de mais ( ) e, finalmente,bc
(calculadora básica) faz as contas.Pode ser necessário um ajuste adicional e você pode ter o
ls
comando reclamando sobre a lista de argumentos muito longa.fonte
Outra solução simples.
o resultado parecerá
alterar "du -s" para "du -sh" mostrará o tamanho legível por humanos, mas não poderemos classificar neste método.
fonte
você pode usar o seguinte para listar arquivos por tamanho du -h | sort -hr | mais ou du -h --max-depth = 0 * | sort -hr | Mais
fonte
Eu tendo a usar du de uma maneira simples.
Isso me dá uma ideia de quais diretórios estão consumindo mais espaço. Posso fazer pesquisas mais precisas mais tarde.
fonte