Como saber o que há em um arquivo e o que não está em outro?

0

Estou fazendo uma nrpe de verificação do meu nagios sobre os arquivos que eu faço backup, enviando para Amazon S3 . Eu tenho dois arquivos, s3 , que listam todos os meus arquivos que já estão na Amazon. E local que lista todos os meus arquivos na minha máquina. Eu preciso saber o que está em local e não está em s3 . Exemplo:

s3

2013-07-01 04:49       145   32ddd73694ab610c3f077a88fb9f3300  s3://company-backup/company-logs/file.1.gz
2013-07-01 04:57       145   68adf73694ab610c3f077a88fb9f3300  s3://company-backup/company-logs/file.2.gz
2013-07-01 05:12       145   36ede43644ab710c8f077a88fb9f3300  s3://company-backup/company-logs/file.3.gz

local

32ddd73694ab610c3f077a88fb9f3300  /company-logs/file.1.gz
68adf73694ab610c3f077a88fb9f3300  /company-logs/file.2.gz
36ede43644ab710c8f077a88fb9f3300  /company-logs/file.3.gz
72ede57455eb850c8f078a88fb9f5900  /company-logs/file.4.gz

Observe que 72ede57455eb850c8f078a88fb9f5900 /company-logs/file.4.gz não está no arquivo s3 . E é isso que deve voltar para mim, como posso fazer isso?

Obrigado!

    
por Valter Silva 12.08.2013 / 16:15

1 resposta

2

Um liner:

diff <(awk '{print $4}' s3 | sort) <(awk '{print $1}' local | sort)

Basicamente, o que ele faz é comparar a saída de awk , que usaremos para imprimir a quarta e a primeira coluna dos arquivos, respectivamente. Precisamos ordenar a saída caso os hashes estejam em ordens diferentes. A sintaxe <(…) é a substituição do processo e nos permite executar diff na saída de dois comandos, embora normalmente só permita que você trabalhe com arquivos.

Produz:

<
---
> 72ede57455eb850c8f078a88fb9f5900

Você saberá que 72ede57455eb850c8f078a88fb9f5900 está apenas no arquivo "certo", ou seja, local .

    
por 12.08.2013 / 16:23