Eu, na maestria da minha preguiça, tentei entender o que voce quer
fazer e bolei o seguinte:

$ USUARIO=nome_usuario
$ DIR=/diretorio/de/busca
$ for X in $(find $DIR -type f -user $USUARIO -exec sh -c 'du "{}" |
cut -f1' \;); do echo "$X" | tr '\n' '+'; echo -n "0"; done | bc -iq

Vamos lá, deixa eu explicar a gambia.
- O find vai buscar no $DIR por todos os arquivos cujo o owner é o
$USUARIO e o for vai formatar essa saida para o formato que o bc
reconheça e possa calcular. Viu que no final ali tem o "pulo do gato"
da gambiarra que é pra linha noa terminar com um "+".
Voce vai ter o resultado final em bytes, se quiser em "Kbytes" é só
adicionar o -k ali no "du" do find.

Se eu entendi o que voce queria, isso deve ajudar se não, eu aprendi
mais um pouco nessa locura ;)


Flávio do Carmo Junior aka blk1d

On 8/29/06, Roberto Alves <[EMAIL PROTECTED]> wrote:
> Obrigado, Júlio mas o problema é que eu tenho um arquivo com usuários e
> tamanho de arquivos em bytes e ainda não consigo somar todos os arquivos
> para cada usuario.
>
> # more du.home.tmp
> admin  5
> admin  1
> guest   10
> user9  5
> user9  3
> user10 4
>
> Ou seja:
> o admin teria 6; guest: 10; user9: 8 e user10: 4 em seus respectivos
> somatórios mas dessa maneira a minha saída ficou assim.
>
> Total de uso em disco do usuario admin em bytes: 0
> Total de uso em disco do usuario guest em bytes: 6
> Total de uso em disco do usuario user9 em bytes: 10
> Total de uso em disco do usuario user10 em bytes: 8
>
> A primeira ocorrência aparece com 0 e as seguintes com os valores errados e
> a última dançou na estória.
>
> Eu já tinha caido nesse erro também mas não consegui sair dele.
>
> abraço,
>
> Roberto
>
>
>
>
> On 8/25/06, Julio C. Neves <[EMAIL PROTECTED]> wrote:
> >
> > Roberto,
> > não entendi legal e por isso pode ser que a solução não seja essa. Mas
> > vamos
> > lá:
> >
> >
> > #!/bin/ksh
> > #  Nome : Du-home
> > #  Procedimento : Verificar o uso em kbytes do fs /home por usuario
> > #
> > clear
> >
> > #du -k /home > du.home.txt
> > #cat du.home.txt |cut -f3 -d/ > user.txt
> > #cat du.home.txt |cut -f1 > size.txt
> > #paste user.txt size.txt | sort > du.home.tmp
> >
> >
> > usuario="a"
> > BYTE=0
> > BYTESUM=0
> >
> > while read USER BYTE
> > do
> >     if  [ $USER = $usuario ]
> >     then
> >         BYTESUM=$(($BYTESUM + $BYTE))
> >     else
> >
> >         echo "Total de uso em disco do usuario $USER em bytes: $BYTESUM"
> >         BYTESUM=$BYTE
> >         usuario=$USER
> >     fi
> > done < du.home.tmp
> >
> > De qq forma, me parece que vc está usando muitos arquivos sem necessidade.
> > Procure armazenar dados temporários em variáveis. Elas foram feitas para
> > isso...
> >
> > Abração,
> > Julio
> > :wq
> >
> >
> >
> >
> >
> > 2006/8/24, Roberto Alves <[EMAIL PROTECTED]>:
> >
> > >
> > >  Pessoal,
> > > to tentando fazer um script que crie uma lista de arquivos do home de
> > cada
> > > usuario em uma maquina, com o du, e some os arquivos por usuario para eu
> > > saber quanto cada um tá gastando de disco.
> > > O script não deve ser dificil mas to errando, acho que no algoritimo.
> > >
> > >
> > > explicacao:
> > > eu criei uma lista "du.home.txt" atraves do comando "du" e tirei as
> > > colunas
> > > que não serviam e fiquei apenas com uma coluna de bytes e outra do nome
> > do
> > > arquivo com o caminho de cada um.
> > > Esse arquivo limpinho com bytes e files eu chamei de du.home.tmp.
> > > Quando leio esse arquivo eu tento armazenar o nome do usuario e somar
> > > todos
> > > os arquivos de cada user mas nao to conseguindo acertar o processo.
> > > Eu comentei esses passos pra nao repetir a toda hora nos testes e fiquei
> > > com
> > > um arquivinho pequeno e resumido pra eu poder verificar mais facil.
> > >
> > > A cara dele é a seguinte:
> > >
> > > server1@>more du.home.tmp
> > > admin  5
> > > admin  5
> > > guest   10
> > > user9  5
> > > user9  3
> > >
> > >
> > > Alguem pode me dar uma ajuda?
> > >
> > >
> > >
> > > server1@>cat du_home.sh
> > > #!/bin/ksh
> > > #  Nome : Du-home
> > > #  Procedimento : Verificar o uso em kbytes do fs /home por usuario
> > > #
> > > clear
> > >
> > > #du -k /home > du.home.txt
> > > #cat du.home.txt |cut -f3 -d/ > user.txt
> > > #cat du.home.txt |cut -f1 > size.txt
> > > #paste user.txt size.txt | sort > du.home.tmp
> > >
> > >
> > > usuario="a"
> > > BYTE=0
> > > BYTESUM=0
> > >
> > > while :
> > >         read USER BYTE
> > >         do
> > >
> > >         [ $USER != $usuario ] &&
> > >           BYTESUM=$(( "$BYTESUM" + "$BYTE" ))
> > >           echo "Total de uso em disco do usuario $USER  em bytes:
> > > $BYTESUM"
> > > ||
> > >           # > saida.teste
> > >
> > >           BYTESUM=$(( "$BYTESUM" + "$BYTE" ))
> > >           usuario=$USER
> > >           echo "Total de uso em disco do usuario $USER  em bytes:
> > > $BYTESUM"
> > >           # >> saida.teste
> > >
> > >         done < du.home.tmp
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> >
> >
> >
> > --
> > Abraços,
> > Julio
> > http://www.julioneves.com - Um livro sobre Bash completo e on-line
> > :wq
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
> [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: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
>
> 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: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
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:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a