2013-11-12 2 views
3

У меня есть два архива tar (сжатый или не сжатый), и я хочу найти все различия в двух архивах. Оба архива содержат полную файловую систему (т. Е. При распаковке, генерируют такие каталоги, как /bin, /home, /root, /usr, /var, /etc, ... надеюсь, вы поняли смысл). Я хочу иметь список из следующих:Как сравнить два архива tar (включая содержимое файла, новые/удаленные файлы, символические ссылки)?

  • Новые файлы
  • Удалены файлы
  • Измененные файлы (содержимое файла, а не только размер)
  • Изменены Symlinks (как относительные, так и абсолютные)
  • Новые/удаленные симлинки

Я не могу просто распаковать эти архивы и использовать diff, поскольку разница не будет корректно распознать абсолютную символическую ссылку s (поскольку они указывают на структуру файловой системы архива).

Есть ли другой способ сравнить содержимое двух архивов tar?

+0

можно использовать питон перечислить содержимое каждого архива дегтя. На самом деле это не ответ; это направление использования. Для того, чтобы заставить его работать должным образом, требуется не тривиальное усилие. – Petesh

+0

Если нет способа сделать это в одной строке, чем нет. Я просто хочу услышать информацию от экспертов, если такой инструмент существует или может быть объединен некоторыми стандартными инструментами unix. – Alex

+0

Я не думал об этом, но 'rsync' обладает довольно хорошими рекурсивными возможностями сравнения. Таким образом, вы можете попробовать 'rsync -nPavH ' и посмотреть, можете ли вы разумно разобрать его вывод. Кроме того, если это идет в правильном направлении, я думаю, есть также «librsync». –

ответ

4

Лучшее, что я могу думать о том, чтобы использовать:

tar -tvf archive.tar 

, чтобы просмотреть содержимое файла.

Что-то вроде:

tar -tvf archive1.tar > list1 
tar -tvf archive2.tar > list2 
diff list1 list2 
+2

Это не проверяет различия внутри файла EACH. – Alex

+0

нет, хотя сравнение размеров и штампов времени может быть хорошим началом. –