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