Что: cfd13c8d194c01a2383dbb04cc6b4279bf7499b4
Когда: 2023-05-10 16:56:45+03:00
Темы: perl tip
Удаление файлов с похожими именами https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0 Среди скачанных lossless альбомов на замену MP3 (96cac6d683e023383670bf6cbccf91c7eff90063) есть много альбомов с не совпадающими именами: опечатки, наличие восклицательных знаков, многоточия, разные регистры букв, пропущенные года в имени, и т.д.. Надо бы как-то автоматизировать поиск похожих имён. Когда-то я просто слышал про расстояние Левенштейна, но никогда на практике не использовал ничего связанного с подобным. Судя по всему, как минимум, он то что мне нужно. Для Perl есть лёгкая библиотека по его расчёту. Беру отсортированный список директорий и вывожу пары между которыми расстояние меньше заданного: use Text::Levenshtein qw(distance); my @lines = map { chop; $_ } <STDIN>; for (my $i = 0 ; $i < ($#lines - 1); $i++) { my ($l1, $l2) = ($lines[$i], $lines[$i+1]); print "$l1\n$l2\n\n" if (distance($l1, $l2) <= $ARGV[0]); } Расстояние подбирал эмпирически: указывал одно, сохранял результат в файл, затем другое, затем сравнивал файлы comm -3 командой и смотрел имеются ли отличия значимые. Несколько сотен директорий подчистил таким образом.
Сгенерирован: SGBlog 0.34.0