Como diferencio a saída de vários comandos? vimdiff
pode suportar até quatro arquivos, mas diff
parece suportar exatamente dois arquivos.
É diretamente possível com alguma variante de diff
, ou eu tenho que salvar a saída de todos os comandos em arquivos temporários, escolher um e diferenciar o restante com ele?
Contexto:
Eu tenho que verificar a saída de um determinado comando em vários servidores e ver se todos eles concordam. No momento, apenas relatar se alguma diferença é encontrada parece bom, mas se possível, eu gostaria de poder dizer: X% de servidores concordam entre si, Y% entre si; ou esse servidor Z é o estranho.
Eu tenho uma configuração LDAP multimestre de quatro vias e quero verificar se os ContextCSN
valores para todos os quatro estão de acordo.
Então agora eu faço:
#! /bin/bash
for i in {1..4}.ldap
do
ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn;
done
set -e
for i in {2..4}
do
diff -q 1.csn $i.csn
done
E verifique o código de erro do script. Existem melhores ferramentas para isso?
Todas as ferramentas que podem ser usadas no Ubuntu 14.04 são bem-vindas.
A
fdupes
ferramenta pode ser útil para você aqui (deve estar nos repositórios). Se você tiver um grande número de arquivos para comparar, poderá usá-lo para reduzir o trabalho que precisa realizar, identificando quais já são idênticos. Como observado abaixo, ele funciona apenas com argumentos de diretório. Se você tiver todos os arquivos para diferir em um diretório, poderá fazer algo como:Para identificar arquivos iguais. Ou:
Para identificar arquivos que são únicos.
O
diff3
comando também pode ser útil.fonte
fdupes
parece precisar de um diretório como argumento (facilmente contornado), mas sim, uma contagem de arquivos retornados porfdupes
é muito útil.Se você deseja apenas ver se os arquivos estão de acordo, não precisa realmente de diff. Basta usar
sha1sum
ou algo assim.por exemplo:
Isso fornecerá uma lista separada por espaços de servidor, pares sha1sum. Servidores com o mesmo sha1sum têm a mesma saída:
Você pode fazer um processamento adicional para obter uma lista de servidores correspondentes, por exemplo:
que fornece resultados como:
fonte