[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Verificando a integridade de arquivos com nomes com e
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Verificando a integridade de arquivos com nomes com espaços |
Date: |
Wed, 16 May 2012 13:00:28 -0300 |
Fala Adelnir,
o problema é que o xargs bota atrás do md5sum (com todo respeito ;) o que
recebe da entrada primária (via pipe). Se ele receber um arquivo chamado
'nome ruim', após o xargs será executado:
md5sum nome ruim
isto é *tentará* calcular o md5 de 2 arquivos que não existem. Isso
funcionaria se o espaço estivesse protegido e para fazê-lo usando o xargas,
a linha de cmds deveria ser:
$ find $1 -type f | xargs -i md5sum {} | awk '{print $1":"$2}'
Mas isso ficaria muito mais que a tua solução com find puro e usando a ação
-exec. Para resolver esse problema de lentidão, basta vc envenenar o teu
find e para fazer isso, basta trocar o ponto-e-vírgula (;) do final, por um
mais (+).
find $1 -type f -exec {} md5sum \+ | awk '{print $1":"$2}'
Não requer prática nem habilidade ;). Teste os tempos usando as 3 hipóteses
e te peço que depois os informe nessa lista, para que todos aprendam esse
macete muito pouco utilizado do find. Já dando mastigado:
$ time find $1 -type f | xargs -i md5sum {} | awk '{print $1":"$2}'
$ find $1 -type f -exec {} md5sum \; | awk '{print $1":"$2}'
$ find $1 -type f -exec {} md5sum \+ | awk '{print $1":"$2}'
O tempo do último será menor, pq nos 2 primeiros o md5sum será carregado a
cada arquivo encontrado e no último será carregado somente uma vez. Assim
sendo, qto mais arquivos houverem no dir $1, maior será a diferença de
tempo de execução.
PS: o curso que darei no RJ, aborda isso tudo. ;) Inscreva-se! restam
somente 2 vagas.
Abcs,
Julio
*
*
Em 15 de maio de 2012 19:45, andelnyr <address@hidden> escreveu:
> **
>
>
> Prezados
>
> Estou tentando controlar as alterações realizadas por usuários em seus
> computadores com a seguinte estratégia:
>
> Ao configurar uma máquina, gero um arquivo de verificação com o seguinte
> script:
>
> #!/bin/bash
> find $1 -type f | xargs md5sum | awk '{print $1":"$2}'
>
> Executo o script e forneço os diretórios que me interessam controlar como
> argumento e redireciono a saída para um arquivo.
>
> Quando sou solicitado a dar manutenção em um destes computadores, a minha
> primeira providência é rodar o script de verificação e comparar os arquivos
> resultantes.
>
> Ocorre que quando tenho arquivos com nomes com espaços o script acima não
> resolve e passo a usar este:
>
> #!/bin/bash
> find $1 -type f -exec {} md5sum \; | awk '{print $1":"$2}'
>
> Ok, ok - obtenho o mesmo resultado, mas fica a pergunta - qual seria a
> modificação que eu deveria produzir no primeiro script para que ele
> funcionasse como desejado? Renomear os arquivos não é uma opção.
>
> Agradeço antecipadamente a dica.
>
>
>
[As partes desta mensagem que não continham texto foram removidas]