Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox [+/- OFF-TOPIC]

2006-02-18 Por tôpico Ricardo A. Reis
Tiago Cruz wrote:

Caras, tem outro email :-)
Sorry moderador !!!

Entraria no diretorio que contem os emails e:

 find . -type f -ls | awk '$8 ~ /Jan/ { gsub(/^.*\.\//,) ; print mv 
 \$0\ /tmp }'
 

 Amigão, uma última coisa:

 Esse comando sai varrendo subdiretórios pela string indicada, certo?
 Bom, eu tentei fazer duas coisas sem sucesso aqui:

 1-) Mudar o ls | awk para ls cur/* | awk, pois só as mensagens do
 cur/* me interessam e o comando não funciona
   
a opção -ls tem como input a saida do comando find, pra fazer oq vc quer
das duas uma, ou vc modifica o cwd ou modifica o find

find ./cur -type f -ls | awk '$8 ~ /Jan/ { gsub(/^.*\.\//,) ; print mv 
\$0\ /tmp }'

 2-) Mudar /Jan/ e /tmp por variáveis, tipo /$mes e $maildir que
 o find não aceita :-(
   
Faz essas variaveis em seu script e modifica a linha por algo assim

find ./cur -type f -ls | awk '$8 ~ /'$mes'/ { gsub(/^.*\.\//,) ; print mv 
\$0\ /'$maildir' }'

praticamente vc tem que fazer passar uma variavel para algum comando externo 
'$variavel' dentro de qualquer comando.


Atencoisamente 

Ricardo A. Reis
UNIFESP
Unix and Network Admin





   



___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Paulo Coimbra
Ja que a saida do ls serve pra vc, tente isso:

ls -la | grep Jan | awk '{ print $9 } '

Espero ter ajudado,

Paulo Coimbra


 Olá pessoal,

 Estou usando meus super conhecimentos ninjas para fazer um script que
 copie as mensagens do mês corrente e jogue em uma pasta separada, apenas
 para deixar a mailbox mais vazia pois se depender do usuário vai sempre
 ter sempre 8.000 mensagens na caixa de entrada :-)

 Bom, o que eu não consigo fazer é um modo para localizar e mover os
 arquivos do mês de Janeiro, por exemplo... só o que consigo fazer é
 pegar os aquivos de 30 dias atrás, o que não é muito confiável.

 Se desse para mover a saída de ls -l | grep Jan por exemplo seria
 ótimo.

 Abaixo segue a coisa que estou tentando bolar:

 -88
 #!/bin/sh
 data=`date +%m`
 if [ $data = '01' ] ; then  dias=30  mes=Janeiro
 elif [ $data = '02' ]; then dias=27  mes=Fevereiro
 elif [ $data = '03' ]; then dias=30  mes=Marco
 elif [ $data = '04' ]; then dias=29  mes=Abril
 elif [ $data = '05' ]; then dias=30  mes=Maio
 elif [ $data = '06' ]; then dias=29  mes=Junho
 elif [ $data = '07' ]; then dias=30  mes=Julho
 elif [ $data = '08' ]; then dias=30  mes=Agosto
 elif [ $data = '09' ]; then dias=29  mes=Setembro
 elif [ $data = '10' ]; then dias=30  mes=Outubro
 elif [ $data = '11' ]; then dias=29  mes=Novembro
 elif [ $data = '12' ]; then dias=30  mes=Dezembro
 fi

 echo Para o mês $mes fazer um find de $dias atrás

 # Cria e 'assina' o diretório
 maildirmake .$mes
 chown -R vmail:vmail .$mes/
 cat courierimapsubscribed
 echo INBOX.$mes  courierimapsubscribed

 # Rodar no último dia do mês!
 find cur -type f -mtime -$dias -exec mv * .$mes/cur {} \;
 -88

 Grato

 --
 Tiago Cruz
 http://linuxrapido.org
 Linux User #282636

 The box said: Requires MS Windows or better, so I installed Linux

 ___
 freebsd mailing list
 freebsd@fug.com.br
 http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br



___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Paulo Coimbra
Ou ainda, colocando um espaco antes e depois do mes

ls -la | grep \ Jan\  | awk '{ print $9 } '

Espero ter ajudado,

Paulo Coimbra


 Olá pessoal,

 Estou usando meus super conhecimentos ninjas para fazer um script que
 copie as mensagens do mês corrente e jogue em uma pasta separada, apenas
 para deixar a mailbox mais vazia pois se depender do usuário vai sempre
 ter sempre 8.000 mensagens na caixa de entrada :-)

 Bom, o que eu não consigo fazer é um modo para localizar e mover os
 arquivos do mês de Janeiro, por exemplo... só o que consigo fazer é
 pegar os aquivos de 30 dias atrás, o que não é muito confiável.

 Se desse para mover a saída de ls -l | grep Jan por exemplo seria
 ótimo.

 Abaixo segue a coisa que estou tentando bolar:

 -88
 #!/bin/sh
 data=`date +%m`
 if [ $data = '01' ] ; then  dias=30  mes=Janeiro
 elif [ $data = '02' ]; then dias=27  mes=Fevereiro
 elif [ $data = '03' ]; then dias=30  mes=Marco
 elif [ $data = '04' ]; then dias=29  mes=Abril
 elif [ $data = '05' ]; then dias=30  mes=Maio
 elif [ $data = '06' ]; then dias=29  mes=Junho
 elif [ $data = '07' ]; then dias=30  mes=Julho
 elif [ $data = '08' ]; then dias=30  mes=Agosto
 elif [ $data = '09' ]; then dias=29  mes=Setembro
 elif [ $data = '10' ]; then dias=30  mes=Outubro
 elif [ $data = '11' ]; then dias=29  mes=Novembro
 elif [ $data = '12' ]; then dias=30  mes=Dezembro
 fi

 echo Para o mês $mes fazer um find de $dias atrás

 # Cria e 'assina' o diretório
 maildirmake .$mes
 chown -R vmail:vmail .$mes/
 cat courierimapsubscribed
 echo INBOX.$mes  courierimapsubscribed

 # Rodar no último dia do mês!
 find cur -type f -mtime -$dias -exec mv * .$mes/cur {} \;
 -88

 Grato

 --
 Tiago Cruz
 http://linuxrapido.org
 Linux User #282636

 The box said: Requires MS Windows or better, so I installed Linux

 ___
 freebsd mailing list
 freebsd@fug.com.br
 http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br



___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Tiago Cruz
On Wed, 2006-02-15 at 08:07 -0300, Paulo Coimbra wrote:
 Ou ainda, colocando um espaco antes e depois do mes
 
 ls -la | grep \ Jan\  | awk '{ print $9 } '
 
 Espero ter ajudado,

Opa Paulo,

Valeu rapaz... gostei desse comando :)
Mas... tu sabes como eu poderia pegar essa saída e mover para algum
lugar?

Pensei em mandar isso para um txt temporário e mandar o mv ler esse
arquivo, mas parece que ele ainda não conhece esse truque :-(

Obrigado!

-- 
Tiago Cruz
http://linuxrapido.org


___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Renato Botelho
On 2/15/06, Tiago Cruz [EMAIL PROTECTED] wrote:
 On Wed, 2006-02-15 at 08:07 -0300, Paulo Coimbra wrote:
  Ou ainda, colocando um espaco antes e depois do mes
 
  ls -la | grep \ Jan\  | awk '{ print $9 } '
 
  Espero ter ajudado,

 Opa Paulo,

 Valeu rapaz... gostei desse comando :)
 Mas... tu sabes como eu poderia pegar essa saída e mover para algum
 lugar?

 Pensei em mandar isso para um txt temporário e mandar o mv ler esse
 arquivo, mas parece que ele ainda não conhece esse truque :-(

faz um for com essa saida e move 1 por 1

for f in `ls -la | grep \ Jan\  | awk '{ print $9 } '`; do
  mv $f /outro_lugar
done

--
Renato Botelho
___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Ricardo A. Reis
Isso é meio off mas,

Eu faria algumas modificações,

1. problema

Caso o servidor tiver muitos arquivos pequenos o que acontece com 
mailservers,
o uso do ls vai demorar alguns minutos e consumir alguns megas de 
memoria, tudo isso
acontece devido ao ls tentar colocar td de forma ordenada.
Pelos meus servidores 300.000 arquivos consomem +/- 200MB
Pra evitar isso tente usar -f no ls

2. O uso do awk para imprimir a coluna $9 é problematico, pq ele não vai 
imprimir de forma
correta se o nome do arquivo tiver espaço, isso não acontece com 
frequencia em mailservers

3. O uso do for é discutivel porque caso o problema do awk seja 
resolvido o for vai tratar  
e dessa forma o arquivo não vai ser movido, eu modificaria isso pra 
usar  while.
Algo como  comando |while read arquivo;do mv $arquivo /tmp;done
  

   No final de td isso eu acho que usaria algo como,

   Entraria no diretorio que contem os emails e:

find . -type f -ls | awk '$8 ~ /Jan/ { gsub(/^.*\.\//,) ; print mv 
\$0\ /tmp }'

saida é

mv 1140012634.V49I21e6.monitor.epm.br /tmp

   O comando acima so motrara na tela, pra fazer vc pode salvar em um 
arquivo em usar
vc pode  'sh arquivo' ou fazer o awk fazer pipe para o shell.

find . -type f -ls | awk '$8 ~ /Feb/ { gsub(/^.*\.\//,) ; print mv 
\$0\ /tmp|sh }'

   Teste primeiro e se estiver certo pode rodar :-)



  
Curiosidade, dentro do diretorio dos emails tenta fazer isso cat . 
|strings é muito mais rapido que qualquer ls ou find


Atenciosamente

Ricardo A. Reis
UNIFESP
Unix and Network Admin

 faz um for com essa saida e move 1 por 1

 for f in `ls -la | grep \ Jan\  | awk '{ print $9 } '`; do
   mv $f /outro_lugar
 done

 --
 Renato Botelho
 ___
 freebsd mailing list
 freebsd@fug.com.br
 http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br

   

___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Tiago Cruz
Olá Ricardo,

On Wed, 2006-02-15 at 12:23 -0200, Ricardo A. Reis wrote:
 Isso é meio off mas,
 
 Eu faria algumas modificações,

Eu não acho isso off, de forma alguma...

 1. problema
 
 Caso o servidor tiver muitos arquivos pequenos o que acontece com 
 mailservers, o uso do ls vai demorar alguns minutos e consumir alguns megas 
 de 
 memoria, tudo isso acontece devido ao ls tentar colocar td de forma ordenada.
 Pelos meus servidores 300.000 arquivos consomem +/- 200MB
 Pra evitar isso tente usar -f no ls

Realmente, este problema existe... mas aqui não é tão grande assim :-)


 2. O uso do awk para imprimir a coluna $9 é problematico, pq ele não vai 
 imprimir de forma correta se o nome do arquivo tiver espaço, isso não 
 acontece com 
 frequencia em mailservers

Caraca... realmente, ele ignora os caracteres depois do espaço, embora
eu tenha a impressão que o Courier-IMAP não guarda arquivos com espaço,
é melhor evitar isso...


 3. O uso do for é discutivel porque caso o problema do awk seja 
 resolvido o for vai tratar   e dessa forma o arquivo não vai ser movido, eu 
 modificaria isso pra 
 usar  while.
 Algo como  comando |while read arquivo;do mv $arquivo /tmp;done

Não entendi. O for não trabalha com aspas, é isso?
  

 O comando acima so mostrará na tela, pra fazer vc pode salvar em um 
 arquivo em usar vc pode 'sh arquivo' ou fazer o awk fazer pipe para o shell:
 
 find . -type f -ls | awk '$8 ~ /Feb/ { gsub(/^.*\.\//,) ; print mv 
 \$0\ /tmp|sh }'

Bom rapaz... o scripitão já estava funcionando e eu iria enviar de volta
para vocês agora, mas depois desse trem todo ae... hehehehe... acho que
terei que refazer algumas partes...

Aparentemente isso funciona direitinho e talz... mas... sabe como é...

sub(r, t, s)
substitutes t for the first occurrence of the regular expression
r in the string s.  If s is not given, $0 is used.

gsubsame as sub except that all occurrences of the  regular  expres-
sion  are  replaced;  sub and gsub return the number of replace-
ments.

Cuméquié ae? Quem é r, quem é t e quem é s em (/^.*\.\//,) 8-P

E... se você tiver tempo para explicar um pobre programador de VB
falido, pra que tanto \$0\ no final? Eu tentei tirar umas aspas,
umas barras para ver o que acontece mas não entendi direito... hehehe


 Curiosidade, dentro do diretorio dos emails tenta fazer isso cat . 
 |strings é muito mais rapido que qualquer ls ou find

Aqui não chega a fazer diferença, mas obrigado por avisar :)

Brigadão!
Vou mandar o script em outro email

-- 
Tiago Cruz
http://linuxrapido.org


___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox

2006-02-15 Por tôpico Tiago Cruz
On Wed, 2006-02-15 at 12:23 -0200, Ricardo A. Reis wrote:

Entraria no diretorio que contem os emails e:
 
 find . -type f -ls | awk '$8 ~ /Jan/ { gsub(/^.*\.\//,) ; print mv 
 \$0\ /tmp }'

Amigão, uma última coisa:

Esse comando sai varrendo subdiretórios pela string indicada, certo?
Bom, eu tentei fazer duas coisas sem sucesso aqui:

1-) Mudar o ls | awk para ls cur/* | awk, pois só as mensagens do
cur/* me interessam e o comando não funciona

2-) Mudar /Jan/ e /tmp por variáveis, tipo /$mes e $maildir que
o find não aceita :-(

Valeus!!

-- 
Tiago Cruz
http://linuxrapido.org


___
freebsd mailing list
freebsd@fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br