Ferramentas do usuário

Ferramentas do site


dicas_unix_e_etc

Essa é uma revisão anterior do documento!


Expressões Regulares

Uma ótima referência on-line sobre o assunto: http://guia-er.sf.net

Expressão regular para colocar ponto de milhar em números até trilhões

 $ (echo 1234567890123; echo 1234) | sed -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\)$/\1.\2/' \
 -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\.[0-9]\{3\}\)$/\1.\2/' \
 -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\)$/\1.\2/' \
 -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\)$/\1.\2/'

 1.234.567.890.123
 1.234

Notem que essa é a sintaxe para uso com o sed. Em várias outras ferramentas, como perl por exemplo, a sintaxe muda um pouco. No perl não seria necessário usar a barra de escape nos parêntesis e chaves. Notem ainda que não se trata de apenas uma expressão, é a aplicação seqüencial de 4 expressões regulares que dá o resultado esperado. Talvez dê para reduzir isso, mas não parei pra pensar por falta de tempo e por que essa já resolveu meu problema.

Scripts

Upload de arquivos

Este é na verdade um conjunto de scripts combinando shell e php para upload de arquivos em grande número e possivelmente grandes. A necessidade surgiu para enviar arquivos a partir de uma rede fechada por firewall, que não permitia upload de arquivos via FTP. Para usar HTTP temos dois problemas, o upload é via formulário e não suporta grandes volumes de dados em geral.

A solução final tem 2 scripts na origem, que podem receber uma lista grande de arquivos grandes para upload. O script principal verifica o tamanho do arquivo, parte se necessário, envia cada parte ou cada arquivo, providencia a junção das partes no destino e registra o sucesso ou fracasso de cada upload, verificando isso via checksum com hash md5. Se o arquivo final foi corretamente enviado ou juntado (no caso de ter sido partido) o arquivo é renomeado com um prefixo “foi-”.

Inicialmente é necessário configurar o script principal da origem para indicar a url de upload, parâmetros do proxy, localização de comandos e limite de tamanho a partir do qual deve se partir os arquivos. Um pré-requisito básico, algumas vezes não encontrado no sistema de origem, é o comando wget.

Tanto o sistema origem como destino precisa ser unix-like, embora o php no destino possa ser refeito para evitar essa necessidade no destino. Na origem é um pouco mais complicado fugir do shell, mesmo por que, no meu caso pelo menos, o wget foi a única ferramenta que conseguiu passar com sucesso pelo proxy. Cheguei a tentar http_post_data do pacote pecl do php, sem sucesso.

Scripts na origem

post.sh - script principal. Deve ser configurado inicialmente. É quem deve ser executado, passando na própria linha de comando os arquivos que devem ser enviados ao destino.

post.php - script auxiliar que codifica o arquivo original em base64 para envio. É necessário interpretador php de linha de comandos para executá-lo.

Script no destino

recebe.php - recebe, decodifica e junta os arquivos enviados.

dicas_unix_e_etc.1224074042.txt.gz · Última modificação: 2008/10/15 09:34 por cartola