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 [+/- OFF-TOPIC ]

2006-02-15 Por tôpico Ricardo A. Reis

> Eu não acho isso off, de forma alguma...
>   
   Como vc é o interessado, realmente não é off ! :-)
   Este deve ser o meu ultimo email sobre esse assunto,
   qualquer coisa PVT.

> 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...
>   
   Sim o courier não faz mesmo, mas se vc for lidar com anexos de 
email's separados
isso vai acontecer com frequencia.
> Não entendi. O for não trabalha com aspas, é isso?
>   
Desculpe eu quis dizer que o for não trabalha com espaços em uma 
linha, ele
vai enteder como duas colunas.

> 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.
>   
   Faz exatamente oq esta escrito, substitui por t a primeira ocorrencia
da regexp r, onde s é qual coluna ou variavel onde deve ser aplicada a 
regexp.

> gsubsame as sub except that all occurrences of the  regular  expres-
>   sion  are  replaced;  sub and gsub return the number of replace-
>   ments
   Exatamente como o sub, porem substitui todas as ocorrencias por t.
> .
> Cuméquié ae? Quem é r, quem é t e quem é s em (/^.*\.\//,"") 8-P
>   
   (/r/,"t") fico melhor assim ?

> 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
>   
O primeira \ é apenas um escape para dizer que o primeir  aspa   vai 
ser impresso, ja
o segunda segunda antes do $0 é o fechamento do primeira aspa ".

> Aqui não chega a fazer diferença, mas obrigado por avisar :)
>   
   Isso so vai ser visivel apos os 50.000 arquivos.



Atenciosamente

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 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


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 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 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 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 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:
>
> -8<8<
> #!/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 {} \;
> -8<8<
>
> 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
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:
>
> -8<8<
> #!/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 {} \;
> -8<8<
>
> 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


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

2006-02-15 Por tôpico Tiago Cruz
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:

-8<8<
#!/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 {} \;
-8<8<

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