chemikadze 27.08.2009 23:24
Qt Software — DublicateFinder 0.1
Недавно от друга получил вопрос: "А чем в linux можно удалить повторяющиеся файлы в каталоге/каталогах?". Ответом сначала был скрипт из двух for'ов, но это слишком топорно и не всегда удобно. Хотелось программу, которая могла бы проанализировать содержимое каталогов (в т.ч рекурсивно) и спросить, какие из них можно удалить.Реквест был удволетворен в течении 3-х дней, что получилось - на скриншотах.
Исходный код: http://narod.ru/disk/12503127000/dublicateFinder.tar.bz2.html
ЗЫ: Русского языка пока не сделал, завтра скорее всего переведу.
Да, но только в пределах одного комплекта копий. Поправим и то, и это =)
Писал на Qt4, в тэгах есть.
Сначала хотел проверку сделать именно по хэшам, но потом подумал что md5 коллизия - не самая лучшая вещь, особенно с важными файлами.
Но возможность выбора побайтового или хэшевого сравнения уже в фичерплане =)
Сначала хотел проверку сделать именно по хэшам, но потом подумал что md5 коллизия - не самая лучшая вещь, особенно с важными файлами.
Но возможность выбора побайтового или хэшевого сравнения уже в фичерплане =)
md5 не единственный хэш, да и коллизии там не так часты, да и вообще для поиска дубликатов в одном каталоге вполне хватит и crc32.
А если рекурсивно?
Стоит сделать как сказали ниже, комбинируя md5 и sha1 для файлов с совпадающим размером.
Стоит сделать как сказали ниже, комбинируя md5 и sha1 для файлов с совпадающим размером.
не знаю на сколько это хорошая идея, но можно еще у файлов определенного типа(исполняемых например или медиа-файлов) сравнивать какие-нибудь поля из заголовка.
Не, думаю не нужно.
Только вот основной "заказчик" оказывается немного другого ждал от программы. Ему надо битлов почистить, в папках есть файлы с одинаковыми названиями. Сделать сравнение по хэшу пока не охота, реализую сравнение по именам и выложу как 0.2. Русский есть, допилен интерфейс, улучшено быстродействие поиска, окно настроек - думаю пора.
Только вот основной "заказчик" оказывается немного другого ждал от программы. Ему надо битлов почистить, в папках есть файлы с одинаковыми названиями. Сделать сравнение по хэшу пока не охота, реализую сравнение по именам и выложу как 0.2. Русский есть, допилен интерфейс, улучшено быстродействие поиска, окно настроек - думаю пора.
Молодец, но...
Во-первых, как Ъ-граммар-наци, замечу, что правильно-таки "duplicate :-) (В названии второй колонки тоже поправить надо)
Во-вторых, есть некий FSlint (GUI'ня, судя, по отзывам, хорошая штука); из консольных — liten2 на Python или fdupes на православном Си =)
Во-первых, как Ъ-граммар-наци, замечу, что правильно-таки "duplicate :-) (В названии второй колонки тоже поправить надо)
Во-вторых, есть некий FSlint (GUI'ня, судя, по отзывам, хорошая штука); из консольных — liten2 на Python или fdupes на православном Си =)
Мда, в следующий раз проверю все по словарю =)
Кстати аналагов я думал будет больше. =) Но все-таки я предпочитаю кататься на своем велосипеде.
Кстати аналагов я думал будет больше. =) Но все-таки я предпочитаю кататься на своем велосипеде.
Ну я все аналоги и не искал =)
Кстати, можешь из вышеперечисленного идеи повыхватывать. Например, в FAQ FSlint приводится алгоритм:
Кстати, можешь из вышеперечисленного идеи повыхватывать. Например, в FAQ FSlint приводится алгоритм:
1. exclude files with unique lengths
2. handle files that are hardlinked to each other
3. exclude files with unique md5(first_4k(file))
4. exclude files with unique md5(whole file)
5. exclude files with unique sha1(whole file) (in case of md5 collisions).
2. handle files that are hardlinked to each other
3. exclude files with unique md5(first_4k(file))
4. exclude files with unique md5(whole file)
5. exclude files with unique sha1(whole file) (in case of md5 collisions).
Вероятно одно из 'delete' должно быть 'save' =)
Надеюсь есть опция - select\deselect all ?