Я делаю проверку nrpe для моих nagios о файлах, которые я резервирую, отправляя в Amazon S3 . Тогда у меня есть два файла, s3 , в которых перечислены все мои файлы, которые уже есть в Amazon. И local который перечисляет все мои файлы на моей машине. Мне нужно знать, что находится в local а не в s3 . Пример:

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

местный

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

Обратите внимание, что 72ede57455eb850c8f078a88fb9f5900 /company-logs/file.4.gz отсутствует в файле s3 . И это то, что должно вернуться ко мне, как я могу это сделать?

Спасибо!

1 ответ1

2

Один лайнер:

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

По сути, он сравнивает вывод awk , который мы будем использовать для печати четвертого и первого столбцов файлов соответственно. Нам нужно отсортировать вывод в случае, если хеши находятся в разных порядках. Синтаксис <(…) является подстановкой процесса и позволяет нам запускать diff при выводе двух команд, в то время как обычно он позволяет работать только с файлами.

Это выводит:

<
---
> 72ede57455eb850c8f078a88fb9f5900

Таким образом, вы будете знать, что 72ede57455eb850c8f078a88fb9f5900 находится только в "правильном" файле, т.е. local .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .