Как лучше всего сравнивать структуры каталогов?
У меня есть утилита резервного копирования, которая использует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