FSlint может найти дубликаты файлов. Но предположим, что у вас есть 10 000 песен или изображений и хочет найти ТОЛЬКО те файлы, которые идентичны, но имеют разные имена? Прямо сейчас, я получаю список, который содержит сотни обманов (в разных папках). Я хочу, чтобы имена были согласованными, поэтому я хочу видеть только идентичные файлы с разными именами, а не одинаковые файлы с тем же именем.
Может ли FSlint с расширенными параметрами (или другой программой) выполнить это?
Если вы в порядке, что сценарий печатает все повторяющиеся файлы с одинаковыми и разными именами файлов, вы можете использовать эту командную строку:
find . -type f -exec sha256sum {} \; | sort | uniq -w64 --all-repeated=separate | cut -b 67-
Для запуска примера я использую следующую структуру каталогов , Файлы с похожим именем (и другим номером) имеют одинаковое содержимое:
.
├── dir1
│ ├── uname1
│ └── uname3
├── grps
├── lsbrelease
├── lsbrelease2
├── uname1
└── uname2
А теперь посмотрим, как наша команда совершает магию:
$ find . -type f -exec sha256sum {} \; | sort | uniq -w64 --all-repeated=separate | cut -b 67-
./lsbrelease
./lsbrelease2
./dir1/uname1
./dir1/uname3
./uname1
./uname2
Каждая группа, разделенная новой строкой состоит из файлов с равным содержимым. Не дублирующиеся файлы не указаны.
Отличный скрипт Byte Commander работал, но не дал мне совершенно необходимого мне поведения (перечисление всех дубликатов файлов, содержащих хотя бы одно имя с другим именем). Я сделал следующее изменение, и теперь он отлично работает для моих целей (и спас меня TON времени)! Я изменил строку 160 на:
args.name_filter == "d" and len(filenames[filename]) >= 1 and len(filenames[filename]) != len(hashes[filehash]))