Лучший способ сравнить (выявить различия) полную структуру каталогов?

Лучший способ сравнить (выявить различия) полную структуру каталогов?

Как лучше всего сравнивать структуры каталогов?

У меня есть утилита резервного копирования, которая используетrsync. Я хочу указать точные различия (с точки зрения размеров файлов и дат последнего изменения) между исходным файлом и резервной копией.

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

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT

Конечно, инструмент может быть готовым или идеей для скрипта на Python.

Большое спасибо!

Уди

решение1

Инструмент, который вы ищете, этоrdiff. Это работает как объединение rsync и diff. Это создает файл патча, который вы можете сравнивать или распространять.

решение2

Некоторые люди хотят сравнить файловые системы по разным причинам, поэтому я напишу здесь, чего я хотел и как я это сделал.

Я хотел:

  • Для сравненията же файловая системас самим собой, т.е.снимок,вносить изменения,снимок,сравнивать.
  • Список файлов, которые были добавлены или удалены, не учитывал внутренние изменения файлов.

Что я сделал:

Первый снимок ( before.shскрипт):

find / -xdev | sort > fs-before.txt

Второй снимок ( after.shскрипт):

find / -xdev | sort > fs-after.txt

Чтобы сравнить их ( diff.shскрипт):

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

Хорошая часть в том, что это использует практически все системные двоичные файлы по умолчанию. Сравнение на основе содержимого можно сделать, передав findпараметр -exec, который отображал бы путь к файлу, а затем MD5.

решение3

если вы не хотите устанавливать еще один инструмент...

for host in host1 host2
do
  ssh $host ' 
  cd /dir &&
  find . |
  while
    read line
  do
    ls -l "$line"
  done ' | sort  > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"

И да, это можно сделать с помощью find и exec или find и xargs так же легко, как find в цикле for. И, кроме того, вы можете улучшить вывод diff, чтобы он говорил что-то вроде "этот файл находится на host1, но не на host2" или что-то в этом роде, но в этом случае вы можете просто установить инструменты, о которых все говорят...

решение4

diff -rна самом деле работает довольно хорошо. Если вы просто хотите узнать, отличаются ли файлы, а не фактическое содержание различий, то сделайтеdiff -qr

Связанный контент