Re: [FUG-BR] Ajuda com Shell Script para backup das mailbox [+/- OFF-TOPIC]
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
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
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
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
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
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
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
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