Skip to content

Скрипт на Питоне для рекурсивного сравнения содержимого двух папок.

License

Notifications You must be signed in to change notification settings

gusenov/diff-dir-py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Общие сведения

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 перечислены расширения для которых не нужно проводить построчное сравнение.

Примеры использования скрипта diff-dir.py в качестве инструмента

  1. Вывод справки по коротким опциям:
$ python diff-dir.py -h
diff-dir.py -o <origindir> -c <clonedir> -l
  1. Вывод справки по длинным опциям:
$ python diff-dir.py --help
diff-dir.py --odir <origindir> --cdir <clonedir> --line-by-line
  1. Использование длинных опций:
$ python diff-dir.py --odir /o/ri/gin/al/ --cdir /c/lo/ne/ --line-by-line
  1. Использование коротких опций:
$ 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:

About

Скрипт на Питоне для рекурсивного сравнения содержимого двух папок.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published