fdupes

Использование

user@comp:~$ fdupes [опции] КАТАЛОГ...

где КАТАЛОГ - это абсолютный или относительный путь к каталогу, где мы будем искать дубликаты файлов. Также может быть указано несколько каталогов через пробел.

ОпцииОписание
-r--recurseпроходить по подкаталогам каждого из КАТАЛОГОВ, указанных в командной строке
-R--recurse:проходить по подкаталогам каждого из КАТАЛОГОВ, указанных в командной строке после данной опции
-s--symlinksпроходить по символическим ссылкам
-H--hardlinksпри обычном поведении программы, в случае когда два или больше файлов указывают на одну и ту же область жёсткого диска (жёсткие ссылки) они не определяются как дубликаты; данная опция меняет такое поведение. Более того: если данная опция не установлена (а это случай по умолчанию), то файлы, на которые существует хотя бы одна жёсткая ссылка вообще исключаются из поиска дубликатов. Проверено опытным путём.
-n--noemptyисключить из поиска файлы нулевой длины
-f--omitfirstне включать первый файл в каждый из наборов дубликатов
-1--samelineвыдавать набор дубликатов в одну строку через пробел. Опция - это цифра 1 (один), а не латинская буква L :)
-S--sizeпоказывать размер дубликата
-m--summarizeвывести суммарную информацию о дубликатах. Выдаётся общее количество дубликатов, количество из них уникальных файлов и занимаемое дубликатами место. Информация по самим файлам при этом не выводится (!)
-q--quietне показывать ход процесса. Полезно при выводе результатов в файл
-d--deleteспрашивать у пользователя о действиях над каждым найденным набором дубликатов: какие файлы сохранить, а какие удалить. При глупых настройках файлы могут быть безвозвратно утеряны. Например, если список КАТАЛОГОВ пересекается подкаталогами или если вместе с этой опцией задана опция -s (--symlinks)
-N--nopromptвместе с опцией --delete, сохраняет первый файл в каждом наборе дубликатов и удаляет все остальные файлы без подтверждения пользователя
-v--versionвыводит версию fdupes
-h--helpвыводит справку (на английском)

Работа программы

После ввода команды fdupes сканирует все заданные файлы (подходящие под выборку), составляет их список и генерирует контрольные суммы. Дальше идёт сверка файлов.

Выводится ход процесса сверки (если опциями не указано другое поведение).

Результат сканирования выводится по умолчанию в консоль и только в конце проверки, а не по мере нахождения одинаковых файлов. Пути к файлам выводятся с новой строки, наборы дубликатов разделяются пустой строкой. Размер файла (если указано опциями) выводится в начале каждого набора.

Элементы набора дубликатов сортируются в соответствии со списком КАТАЛОГОВ. То есть элемент из первого КАТАЛОГА будет стоять первым в списке дубликатов, а остальные элементы идут по алфавиту.

Итого

Плюсы: программа работает очень быстро. Предусмотрены различные варианты вывода результатов, что удобно для транслирования в другие приложения для дальнейшей работы с дубликатами. Сбоев замечено не было.

Минусы: По умолчанию из поиска файлов полностью исключаются те, на которые существуют жёсткие ссылки.

FSlint

Пакет FSlint - это прежде всего графический интерфейс fslint-gui, а также ряд утилит для диагностики, исправления и оптимизации файловой системы, которые могут быть вызваны по отдельности из консоли.

Программа FSlint

Помимо поиска дубликатов FSlint умеет находить плохие или конфликтующие имена, временные файлы, мёртвые символические ссылки, пустые каталоги и другой «мусор» файловой системы.

Поддерживаются различные операции с результатом поиска.

Отдельно надо отметить возможность объединения одинаковых файлов с помощью жёстких ссылок.

Основной состав консольных утилит (скриптов) FSlint

Находятся по адресу /usr/share/fslint/fslint/.

fslint — описания скриптов

findbl — ищет битые символические ссылки (Bad Links)
finded — ищет пустые каталоги (Empty Directories)
findid — ищет неиспользуемые или плохие идентификаторы файлов (IDs)
findnl — ищет плохие имемна файлов или каталогов (Name Lint)
findns — ищет неисполняемые бинарники (NonStripped)
findrs — ищет лишние пробельные символы в именах (Redundant whiteSpace)
findsn — ищет файлы с одинаковыми или конфликтующими именами ()
findtf — ищет временные файлы (Temporary Files)
findu8 — ищет имена с неверной перекодировкой в UTF8 (UTF8)
findul — ищет лишние библиотеки (Unused Libraries)
findup — ищет дубликаты файлов (dUPlicate files)

Работа программы

Интерфейс - графический и интуитивно понятный, собственно этим всё и сказано.

Единственное, что можно отметить - при объединении файлов за основу берётся первый в списке дубликатов.

Итого

Плюсы: мощная программа с простым и понятным графическим интерфейсом.

Минусы: бинарники (вместо скриптов) работали бы быстрее.


Максим
2010.12.13 15:55:01
#cid770

Ответить

Почему-то в папке в которой есть заведомо одинаковые файлы с одинаковыми суммами программа не удаляет!!!

Максим
2010.12.13 16:00:14
#cid771

Ответить

max@mail:~$ ls -la ./test
-rw-rw-rw- 2 root root 17890 2010-12-13 13:15 1292235300.M968450P952.mail,W=18195,S=17890:2,ST
max@mail:~$ sudo md5sum ./test/1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd
a9ffcfb1b8dbab357ccd0e756fac7930 ./test/1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd
max@mail:~$ sudo md5sum ./test/1292235300.M968450P952.mail,W=18195,S=17890:2,ST
a9ffcfb1b8dbab357ccd0e756fac7930 ./test/1292235300.M968450P952.mail,W=18195,S=17890:2,ST
max@mail:~$ sudo fdupes -N -d -R ./test
max@mail:~$

2010.12.13 19:07:12
#cid772

Ответить

Почему-то в папке в которой есть заведомо одинаковые файлы с одинаковыми суммами программа не удаляет!!!

По умолчанию программа не удаляет дубликаты в виде жёстких ссылок. Это - тот самый случай, обрати внимание на цифру 2 после прав доступа.
Чтобы удаляла надо запускать с ключом -H

max@mail:~$ ls -la ./test
-rw-rw-rw- 2 root root 17890 2010-12-13 13:15 1292235300.M968450P952.mail,W=18195,S=17890:2,ST

Кстати, а где файл
./test/1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd
?

Андрей
2015.03.12 16:28:57
#cid90366

Ответить

Просканировал на дубликаты,от 2 до "много" одинаковых.Что нажимать,"удалить","обьединить".?Не спец я в програмировании.

2015.03.12 21:09:01
#cid90367

Ответить

#cid90366, Андрей

Просканировал на дубликаты,от 2 до "много" одинаковых.Что нажимать,"удалить","обьединить".?Не спец я в програмировании.

"Объединить" — это вместо второго файла создать жёсткую ссылку на первый. То есть, после объединения у тебя две записи в файловой системе будут ссылаться на одну и ту же область диска. Дубликат будет удалён, место освободится.

Удалять дубли или объединять с оригиналом — решать тебе, для этого не надо быть программистом.
При обеих операциях освобождается одно и то же дисковое пространство.

Андрей
2015.03.12 21:40:45
#cid90368

Ответить

Забыл добавить,программа FSlint.

Борис
2015.11.29 09:34:00
#cid91145

Ответить

Замечена неправильная работа скрипта findbl комплекта fslint. Если сделана символическая ссылка на директорию, а потом её путём переименования папки где-то в середине пути к ней сделать недействительной, то findbl выдаёт результат поиска такой ссылки не всегда корректно.
Вот рапорт об оборванной ссылке на файл, всё правильно:

2015-11-28/tramwaj/Tatra-t3/2014-01-01/d92c.png -> /home/user1000/Documents/history-index/2015-11-28/kabeli/kalendar/d92c.png

Переименовали tatra-t3 на Tatra-t3, и ссылка стала недействительной, успешно обнаружена, теперь её можно вручную исправить миднайт командером ctrl-x ctrl-s.

А вот рапорт об оборванной ссылке на директорию:
-> /home/user1000/Documents/history-index/2015-11-28/tramwaj/tatra-t3/2015-11-28
Местожительство плохой ссылки в рапорте пропущено, показано только, куда она ссылается. Команда была такая:

user1000@ubuntu-dy530:$ /usr/share/fslint/fslint/findbl -d ./

Аналогичный результат был получен под Убунту "14.04.3 LTS" и под Дебианом "squeeze" на другой машине в такой же ситуации.
Куда бежать?

imen
2015.11.29 13:47:10
#cid91146

Ответить

#cid91145, Борис

Куда бежать?

Как куда?!?
Направление стандартное — bug tracker разработчика.
Начинать искать с http://www.pixelbeat.org/fslint/