Como obtenho o antigo comportamento 'du' de volta?

3

Tentando mover coisas no meu servidor (Ubuntu 12.04) Eu queria saber o tamanho de cada um dos subdiretórios do diretório atual e o total do diretório atual usando du :

$ du -sm * .
34      A
23      B 
1       .

Eu li isso como o total dos tamanhos dos subdiretórios (a soma dos valores nas duas primeiras linhas) é maior que o do diretório atual junto com seus subdiretórios (a última linha). Em um servidor rodando o Ubuntu 8.04, isso ainda funciona como quando eu usei pela primeira vez a opção -sm há 30 anos:

$ cd /var/spool
$ du -sm * .
1      cron
1      cups
0      mail
2      postfix
3      .

A causa dessa diferença é que na máquina Ubuntu 12.04 eu tenho coreutils versão 8.13 e no Ubuntu 8.04 existe coreutils 6.10. Houve alguma otimização, provavelmente relacionada a esta , que não conta / exibe diretórios duas vezes, mesmo se especificado na linha de comando: na versão mais recente, du -sm . . fornece apenas uma resposta de uma linha na versão antiga, uma resposta com duas linhas idênticas.

Na máquina 12.04, eu consegui fazer du -sm * ; du -sm . , mas fazer isso para os diretórios nos quais estou realmente interessado não é uma opção, pois há 28 filhos diretos com mais de um terabyte de dados em vários milhões de arquivos. Andar uma vez sobre esta árvore de diretório leva horas e desde que a informação de diretório parece grande para o sistema operacional para armazenar em cache, imediatamente executando um segundo du leva a mesma quantidade de tempo (ou seja, eu não tenho o efeito típico que quando você executa du -s duas vezes em uma subárvore maior na segunda vez é muito mais rápido).

Eu sei que posso tee o resultado em um programa e adicionar os valores na primeira coluna, mas seria bom se houvesse uma maneira de recuperar o antigo comportamento du .

Existe uma opção de linha de comando que perdi para coreutils du ou uma alternativa du que eu possa instalar?

(Eu também tenho a impressão de que du ficou mais lento, mas pode ser porque a quantidade de dados que armazeno e manejo cresceu ao longo dos anos. E o sistema 12.04 está executando o Btrfs e isso diminuiu muitos coisas, daí a movimentação ao redor).

    
por Anthon 27.12.2014 / 20:01

2 respostas

3

du dir1 dir2

Informa o uso do disco de todos os dir1 , dir2 e seu conteúdo de forma recursiva. Os arquivos são contados apenas uma vez, caso contrário, isso daria uma resposta errada no uso do disco.

Você pode usar:

du -c dir1 dir2

Se você também quiser o uso total de disco de ambos.

Então:

du -sc -- *

daria a você um resumo do uso de disco dos diretórios e arquivos não ocultos no diretório atual e seu tamanho cumulativo.

Com o GNU du , você também pode fazer:

du -ad1

ou

du -a --max-depth=1

Para relatar o uso do disco até um nível abaixo (então . e os subdiretórios), aqui usando -a para relatar não-dirs no diretório atual, como o du * faria.

Você pode forçar o GNU du a contar arquivos várias vezes com a opção -l :

du -ls -- * .

Não é eficiente e é improvável que seja o que você realmente quer.

    
por 27.12.2014 / 21:37
3

A opção -c produz um total, o que significa que, no seu caso de uso , o comando du -smc * dá a quase ( . é substituída por total ) a mesma saída que du -sm * . com versões anteriores de du :

$ du -smc *
34  A
23  B
57  total

Mesmo se você tiver casos de uso diferentes do que o da sua pergunta, acho que a opção -c pode ajudar você a obter um resultado próximo ao que você usa.

    
por 27.12.2014 / 22:14

Tags