shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] du que envia para txt diretorios acima de 50 mega..


From: Fábio Batista
Subject: Re: [shell-script] du que envia para txt diretorios acima de 50 mega..
Date: Wed, 26 Jan 2005 11:05:09 -0300

Caro Rodrigo,

Normalmente não costumo responder a mensagens com este tipo de
conteúdo, mas acho que você precisa de esclarecimento sobre alguns
poucos pontos básicos com relação ao uso de um sistema de arquivos.

(Obs: Segue-se conteúdo básico de ciência da computação. Corro o risco
de estar off-topic, mas acredito que pelo menos os conceitos de um
sistema de arquivos sejam necessários para que o shell-scripter saiba
com o que está lidando, mesmo que não seja um cientista.)

Prometo não me alongar muito. Nos sistemas de arquivos em uso
atualmente (refiro-me principalmente a ext3, reiserfs, etc), tudo o
que é acessível (arquivos, diretórios, links, dispositivos, mount
points, named pipes) são *nodos de um grafo*. Cada nodo guarda
informação sobre si mesmo e seus filhos. Aí está a mágica do sistema
de arquivos, porque podemos ter diretórios, e arquivos dentro dos
diretórios, e links para os arquivos, etc.

Estes sistemas de arquivos são eficientes por serem de uma
simplicidade matemática, onde qualquer operação é feita basicamente da
mesma forma, e pouca coisa desnecessária é implementada se você pode
fazê-la seguindo passos menores (é a filosofia das ferramentas do
mundo (Uni|Linu)x).

Pois bem: se você for perguntar ao sistema de arquivos quanto espaço o
diretório /home ocupa, vai obter a seguinte informação:

[root@elefante home]# find /home -maxdepth 0 -printf 'Size of /%f in
bytes: %s\n'
Size of /home in bytes: 624

Ou seja: o diretório /home, em si, ocupa 624 bytes (no meu servidor).

Agora, o que nosso colega Cleiton precisava era saber *a soma do
tamanho de todos os arquivos contidos dentro de cada subdiretório
contido no diretório /home*. Sim, era precisamente isso que ele queria
saber. Porque posso dizer isso com certeza? Porque é o que normalmente
um administrador de servidores quer, afinal de contas, o *espaço
ocupado por um diretório no sistema de arquivos* é uma informação
(completamente)? inútil no campo da administração de servidores.

Por este motivo, corrigi sua dica de que o comando FIND poderia
realizar este trabalho. FIND é realmente um excelente comando - já
comentei na lista, inclusive, que juntamente com SED, é meu comando
preferido. É extremamente versátil, mas especificamente para esta
funcionalidade ele se torna inútil. Para calcular a soma do espaço em
disco ocupado por todos os arquivos contidos em um diretório, temos o
comando DU (Disk Usage), que serve exatamente para este fim - ele
percorre todos os arquivos contidos no(s)? caminho(s)?
especificado(s)? e vai somando os tamanhos, e no final retorna o
resultado.

O resto é simples: uma vez com o resultado do tamanho total dos
arquivos de cada diretório em mãos, podemos aplicar o critério que
acharmos necessário nos dados para filtrá-los. No caso, nosso amigo
Cleiton precisava filtrar por *somatórios maiores que 50MB". Como não
tenho conhecimento de nenhum "grep numérico" (excelente função zz
seria essa, hein?), tivemos que fazer um pequeno script que faz o
trabalho da comparação e filtragem.

Era isso. Espero que meu humilde conhecimento de cientista tenha
adicionado algo aos conhecimentos dos membros da lista. Como estou
longe do meio acadêmico há algum tempo, eventuais correções são bem
vindas (novamente, espero que não seja nem continue off-topic).

Um abraço a todos.

Fábio David Batista
address@hidden
http://nerd-o-matic.blogspot.com

On Tue, 25 Jan 2005 22:09:18 -0200, Rodrigo
<address@hidden> wrote:
>  Mas ele não queria comparar e sim listar os iguais ou maiores que
>  50mb......leia a perunta para dar sua resposta...o find daria sim para
> fazer
>  isso...O du não compara..somente mostra
>  ----- Original Message ----- 
>  From: "cleiton" <address@hidden>
>  To: <address@hidden>
>  Sent: Wednesday, January 26, 2005 9:49 AM
>  Subject: Re: [shell-script] du que envia para txt diretorios acima de 50
>  mega..
>  
>  
>  
>  beleza cara.. melhorei algumas pequenas coisas como me mandar um mail com o
>  resultado e na linha echo fiz o seguinte..
>  
>  echo "maior: $dir $size"
>  
>  gostaria apenas que se o cara tem 47.000.000 na pasta gostaria que
>  aparece-se apenas 47MB.
>  
>  troquei o -b por -h mais dai na condição if da cáca...
>  
>  valeu,
>  
>  Cleiton
>    ----- Original Message ----- 
>    From: Fábio Batista
>    To: address@hidden
>    Sent: Tuesday, January 25, 2005 6:07 PM
>    Subject: Re: [shell-script] du que envia para txt diretorios acima de 50
>  mega..
>  
>  
>    O FIND não compara tamanhos de diretórios, só quem consegue fazer isso
>    é o DU mesmo.
>  
>    Um exemplo de script:
>  
>    #!/bin/sh
>    du --max-depth=0 -b /home/* | while read size dir
>    do
>            if [ "$size" -gt 52428800 ]
>            then
>                    echo "maior: $dir"
>            fi
>    done
>  
>    Tentei usar os malditos "process substitution" pro código ficar mais
>    bonito, mas não consegui :(
>  
>    Fábio David Batista
>    address@hidden
>    http://nerd-o-matic.blogspot.com
>  
>    On Tue, 25 Jan 2005 03:36:30 -0200, Rodrigo
>    <address@hidden> wrote:
>    >  ao invés do du use o find com a opção size.....e direcione para um
>  arquivo
>    >  texto com o >
>    >  ----- Original Message ----- 
>    >  From: "cleiton_schulz" <address@hidden>
>    >  To: <address@hidden>
>    >  Sent: Tuesday, January 25, 2005 3:18 PM
>    >  Subject: [shell-script] du que envia para txt diretorios acima de 50
>  mega..
>    >
>    >
>    >
>    >
>    >  opa..
>    >
>    >  seguinte, tenho vários subdiretórios no /home, alguns com mais de 50
>    >  MB e outros com menos, gostaria de fazer um script que verifica-se o
>    >  tamanho do subdiretório e se esse mesmo estivesse 50 MB ou mais, ele
>    >  adiciona-se uma linha contendo o nome do diretório no arquivo
>    >  usuarios.txt
>    >
>    >  valeu,
>    >
>    >  cleiton schulz
>    >
>    >
>    >
>    >
>    >
>    >
>    >  ---------------------------------------------------------------------
>    >  Esta lista não admite a abordagem de outras liguagens de programação,
>  como
>    >  perl, C etc. Quem insistir em não seguir esta regra será moderado sem
>    > prévio
>    >  aviso.
>    >  ---------------------------------------------------------------------
>    >  Sair da lista: address@hidden
>    >  ---------------------------------------------------------------------
>    >  Esta lista é moderada de acordo com o previsto em
>    >  http://www.listas-discussao.cjb.net
>    >  ---------------------------------------------------------------------
>    >
>    >  Links do Yahoo! Grupos
>    >
>    >
>    >
>    >
>    >
>    >
>    >
>    >
>    >
>    >
>    >
>    >  ---------------------------------------------------------------------
>    >  Esta lista não admite a abordagem de outras liguagens de programação,
>  como
>    > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
>  prévio
>    > aviso.
>    >  ---------------------------------------------------------------------
>    >  Sair da lista: address@hidden
>    >  ---------------------------------------------------------------------
>    >  Esta lista é moderada de acordo com o previsto em
>    > http://www.listas-discussao.cjb.net
>    >  ---------------------------------------------------------------------
>    >
>    >
>    >
>    >
>    >  Yahoo! Grupos, um serviço oferecido por:
>    >
>    >
>    >
>    >
>    >
>    >  ________________________________
>    >  Links do Yahoo! Grupos
>    >
>    > Para visitar o site do seu grupo na web, acesse:
>    > http://br.groups.yahoo.com/group/shell-script/
>    >
>    > Para sair deste grupo, envie um e-mail para:
>    > address@hidden
>    >
>    > O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço
>  do
>    > Yahoo!.
>  
>  
>    ---------------------------------------------------------------------
>    Esta lista não admite a abordagem de outras liguagens de programação,
> como
>  perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio
>  aviso.
>    ---------------------------------------------------------------------
>    Sair da lista: address@hidden
>    ---------------------------------------------------------------------
>    Esta lista é moderada de acordo com o previsto em
>  http://www.listas-discussao.cjb.net
>    ---------------------------------------------------------------------
>  
>  
>  
>          Yahoo! Grupos, um serviço oferecido por:
>  
>                      São Paulo Rio de Janeiro Curitiba Porto Alegre Belo
>  Horizonte Brasília
>  
>  
>  
>  
> ----------------------------------------------------------------------------
>  --
>    Links do Yahoo! Grupos
>  
>      a.. Para visitar o site do seu grupo na web, acesse:
>      http://br.groups.yahoo.com/group/shell-script/
>  
>      b.. Para sair deste grupo, envie um e-mail para:
>      address@hidden
>  
>      c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
>  Serviço do Yahoo!.
>  
>  
>  
>  [As partes desta mensagem que não continham texto foram removidas]
>  
>  
>  
>  ---------------------------------------------------------------------
>  Esta lista não admite a abordagem de outras liguagens de programação, como
>  perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio
>  aviso.
>  ---------------------------------------------------------------------
>  Sair da lista: address@hidden
>  ---------------------------------------------------------------------
>  Esta lista é moderada de acordo com o previsto em
>  http://www.listas-discussao.cjb.net
>  ---------------------------------------------------------------------
>  
>  Links do Yahoo! Grupos
>  
>  
>  
>  
>  
>  
>  
>  
>  
>  
> 
>  ---------------------------------------------------------------------
>  Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
>  ---------------------------------------------------------------------
>  Sair da lista: address@hidden
>  ---------------------------------------------------------------------
>  Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
>  ---------------------------------------------------------------------
>  
> 
>  
>  
>  Yahoo! Grupos, um serviço oferecido por: 
>  
>  PUBLICIDADE
>  
>  ________________________________
>  Links do Yahoo! Grupos
>  
> Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/shell-script/
>   
> Para sair deste grupo, envie um e-mail para:
> address@hidden
>   
> O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do
> Yahoo!.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]