rdfind — ищем дубликаты файлов
rdfind
rdfind — относительно простая, но очень полезная утилита, которая находит одинаковые файлы и выполняет различные действия над ними.
В качестве параметров rdfind может принимать список файлов и каталогов. Поиск внутри каталогов производится рекурсивно. При этом дублирующими файлами считаются те, которые указаны в списке параметров позже или те, которые лежат глубже.
Действия могут быть следующими:
-makesymlinks
,-makehardlinks
— замена дубликата символической или жёсткой ссылкой.-deleteduplicates
— удаление дубликатов.-makeresultsfile
,-outputname
— вывод имён дублирующих файлов в файл.
Несколько примеров использования
-
Быстрый способ найти повторяющиеся файлы в большом каталоге. Например, выполнение
rdfind .
в каталоге с шестью тысячами фотографий с полусотней дубликатов, занимает секунды. -
Вам пришлось скопировать файлы, среди которых есть символические ссылки, на файловую систему, их не поддерживающую, например FAT:
$ cp -RL /path/to/dir /path/to/fat
Теперь после перемещения файлов на полноценную файловую систему хочется восстановить ссылки:
$ cp /path/to/fat /path/to/dir2 $ rdfind -makesymlinks true /path/to/dir2
Следует заметить, что если файлы нужно скопировать на флешку с FAT, чтобы потом перенести на другую систему, то лучше упаковать файлы в tar, который поддерживает символичные ссылки. При этом ссылки, скорее всего должны быть относительными. Помочь преобразовать абсолютные символичные ссылки в относительные поможет symlinks.
-
Вы скачали торрент с жуткими именами или иерархией файлов. Хочется переименовать или поменять структуру файлов и при этом не покинуть раздачу.
$ # создаем копию данных $ cp ~/torrents ~/data $ # делаем необходимые изменения в ~/data $ # заменяем дубликаты в ~/torrents символичными ссылками на файлы в ~/data $ rfind -makesymlinks true -makeresultsfile false ~/data ~/torrents $ # преобразовываем абсолютные пути символических ссылок в относительные $ # (необязательно, но иногда полезно) $ symlinks -cr ~/torrents
Некоторые торрент-клиенты позволяют переименовывать файлы внутри
торрентов. Но данный метод лучше тем, что он не зависит от клиента и
не ограничивает пользователя в средствах переименовывания
файлов. Более того, некоторые файлы в ~/data
можно модифицировать, в
таком случае в ~/torrents
данные файлы останутся нетронутыми.
Почему так быстро
Высокая скорость работы rdfind обеспечивается алгоритмом, который состоит из следующих основных шагов:
- определение размера каждого файла;
- сортировка всех файлов по размеру;
- файлы с уникальными размером отсеиваются (файлы разных размеров не могут быть одинаковыми);
- для файлов с одинаковым размером производится проверка двух участков файлов: начала и конца;
- и только в случае, если данные участки равны, производится расчёт и сравнение хеш-сумм (md5 или sha1).
Ставка делается на то, что последний пункт будет выполняться редко, что справедливо для большинства случаев. Ещё одна техника, которая ускоряет работу rdfind состоит в том, что перед считыванием данных с диска они сортируются по устройству и inode.
Альтернативы
Сам автор rdfind на своём сайте упоминает две альтернативы: duff и fslint, которые по его словам работают в разы медленнее. На вики имеется список из полтора десятка похожих программ.
Комментарии