diff-dir.py - это скрипт на Питоне для рекурсивного сравнения содержимого двух папок.
Скрипт рекурсивно поимённо сравнивает файлы из копии с файлами из оригинала. Сравнение на идентичность проводится путем расчёта и сверки MD5-хешей от файлов. Также можно включить построчное сравнение файлов.
Скрипт принимает на входе пути к двум папкам: оригиналу и копии.
Путь к оригиналу указывается через длинную опцию --odir (в коротком варианте -o).
Путь к копии указывается через длинную опцию --cdir (в коротком варианте -с).
В вывод всегда попадают:
В вывод никогда не попадают:
Формат вывода:
* относительный/путь/к/файлу
- относительный/путь/к/файлу
Обозначения:
В некоторых случаях файлы являются идентичными за исключением способа перевода строки. Если сравнивать такие файлы через их MD5-хеши, то они будут считаться различными.
$ python diff-dir.py --odir tests/line-endings/lf/ --cdir tests/line-endings/cr+lf/
* _languages.js
Поэтому у скрипта есть длинная опция --line-by-line (в коротком варианте -l), которая включает дополнительное сравнение файлов по строкам. При использовании этой опции, если у файлов различные MD5-хеши, но при построковом сравнении они равны, то эти файлы будут считаться идентичными.
$ python diff-dir.py -o tests/line-endings/lf/ -c tests/line-endings/cr+lf/ -l
Для того чтобы избежать построчного сравнения бинарных файлов в константе BINARY перечислены расширения для которых не нужно проводить построчное сравнение.
$ python diff-dir.py -h
diff-dir.py -o <origindir> -c <clonedir> -l
$ python diff-dir.py --help
diff-dir.py --odir <origindir> --cdir <clonedir> --line-by-line
$ python diff-dir.py --odir /o/ri/gin/al/ --cdir /c/lo/ne/ --line-by-line
$ python diff-dir.py -o /or/igi/na/l/ -c /cl/on/e/ -l
Установка пакета в ~/.local/lib/python3.5/site-packages/:
$ pip install diff-dir-py --user
Использование пакета в своём коде:
Функция diffdir.cmp является генератором кортежей из двух элементов: (путь к файлу, статус по нему).
import diffdir
origin = "/o/ri/gin/al/"
clone = "/c/lo/ne/"
difference = diffdir.cmp(origin, clone, True)
for path, status in difference:
print("{} {}".format(status, path))
Результат исполнения вышеприведённого кода:
* относительный/путь/к/файлу
- относительный/путь/к/файлу
Удаление пакета:
$ pip uninstall diff-dir-py
Стандартная библиотека:
Юникод:
Переводы строк:
Импорт модулей:
Каталог пакетов Python Package Index:
Система управления пакетами pip: