shell-script-pt
[Top][All Lists]
Advanced

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]