чем нынче модно искать дубликаты файлов?
Наверняка медленно, но когда искал - находил только need4space, а он давно не развивается и то ли на больших дисках, то ли на больших кол-вах файлов падает
пробовал DupKiller, Duplicate File Finder и ещё что-то со словом "DUP". На больших объёмах (6 Тб) дохли все. В результате пришёл к "ручному" способу: поиском ищутся файлы *.* (ну или по иной нужно маске после чего результаты поиска сортируются по размеру. Файлы с одинаковым размером отсматриваются руками.
это действительно логичный алгоритм, странно, что руками получается, а программы не справляются. Они как тогда написаны?
программы такого рода пытаются оптимизировать ручной этап - они считают контрольные суммы файлов, либо делают byte-to-byte сравнение файлов. На этом и крэшатся. Если эту автоматику отключить - работают нормально, но тогда какой в них смысл?
Ну я все равно не понимаю, как это может быть медленнее.
btw, усложним условие - нужна как раз прога для поиска дубликатов медиафайлов - похожих картинок разного разрешения, похожих аудио по тегам и анализу содержимого (если такое возможно)
поиска дубликатов медиафайлов - похожих картинокдля этого раньше использовал прогу ImgCmp, c указанной функцией вполне справляется, хоть и работает не спеша... правда, в инете сходу не находится, но могу поискать на бекапе старого харда.
ну, честно признаюсь, меня скорее интересует вариант поиска дублей музыкальных файлов, ибо их и больше в разы, и картинки места не так много просят, как музыка.
Купи большой винт.
программы такого рода пытаются оптимизировать ручной этап - они считают контрольные суммы файлов, либо делают byte-to-byte сравнение файлов.Один из плагинов фара имеет возможность выбора параметров для сравнения. Там можно оставить только размер. А можно и ещё первые n байт
fdupes
find / -type f -exec ls -s1 --block-size=1 '{}' ';' | awk '
{
ind = $1
sub("^[[:digit:]]*[[:space:]]*","")
if(ind in nGroups) {
nGroups[ind]++
} else {
nGroups[ind] = 0
}
for(j = 0; j < nGroups[ind]; j++) {
result = system("diff -q \"" groups[ind, j, 0] "\" \"" $0 "\" >/dev/null")
if(!result) {
groups[ind, j, groupSize[ind, j]++] = $0
break
}
}
if(j == nGroups[ind]) {
nGroups[ind]++
groupSize[ind, j] = 1
groups[ind, j, 0] = $0
}
}
END {
for(ind in nGroups) {
for(j = 0; j < nGroups[ind]; j++) {
if(groupSize[ind, j] > 1) {
for(k = 0; k < groupSize[ind, j]; k++) {
printfk ? " " : "") "\"%s\"", groups[ind, j, k])
}
printf("\n=========================================================\n")
}
}
}
}'
ХЗ, правда, глючит чего-то, надо еще подебажить.
находятся отзывы о нестабильной/медленной/etc. работе.Тебя пугает, что программа будет работать 20 секунд вместо 10?
если правильно помню - она полнофункциональна первый месяц юзания.
периодически сравниваю с современными аналогами (и TC-поиск тоже сюда) - лучше пока не видел.
зы. вообще, щас посмотрел - заявлена поддержка семерки, так что, видимо, допиливают периодически, не забросили..
Да ты и вправду маньяк!
> system("diff -q \"" groups[ind, j, 0] "\" \"" $0 "\" >/dev/null")
Во-первых, для сравнения двоичных файлов куда удобнее использовать cmp(1).
Во-вторых, оно будет очень интересно отрабатывать файлы с пробелами в именах.
(По этой причине я всегда использовал md5(1 предполагая, что у меня не будет
переводов строки в именах. Соответственно, для поиска повторов использовал sort-uniq.)
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."
Во-вторых, оно будет очень интересно отрабатывать файлы с пробелами в именах.Почему?
На самом деле, будет очень интересно обрабатывать файлы с кавычками в именах, я на такое забил.
---
"Расширь своё сознание!"
В параллельном форуме народ обсуждает схожую тему.
Наивные юноши ещё не знают, что такое xargs(1).
> я на такое забил.
Есть мнение, что:
а) апострофы в именах файлов встречаются не сказать чтобы часто,
но не так уж и редко;
б) имена файлов, вытянутых из ed2k, начинаются не с пробела
недостаточно редко.
---
"Narrowness of experience leads to narrowness of imagination."
Потому что FS!Какое отношение FS имеет к $0, не подскажешь? Кроме того что иногда "является элементом"?
а) апострофы в именах файлов встречаются не сказать чтобы часто,Ладно, для дотошных: я специально не стал писать эскейпящую функцию, потому что тупо лень. Но в production-скрипте она была бы, разумеется.
но не так уж и редко;
б) имена файлов, вытянутых из ed2k, начинаются не с пробелаБлин, да вот тебе патч: вместо "^[[:digit:]]*[[:space:]]*" "^[[:digit:]]*[[:space:]]". На один символ экономия!
недостаточно редко.
> Кроме того что иногда "является элементом"?
К тому, что ты его просто так съел своим subst
и даже сейчас ещё не заметил того, что сделал.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
sub(r, s [, t])И в разделе Fields ничего не сказано про sub.
Just like gsub but only the first matching substring is replaced.
gsub(r, s [, t])
For each substring matching the regular expression r in the string t, substitute the string s, and return the number of substitutions. If t is not supplied, use $0. An & in the replacement text is replaced with the text that was actually matched. Use \& to get a literal &. (This must be typed as ; see GAWK: Effective AWK Programming for a fuller discussion of the rules for &’s and backslashes in the replacement text of sub gsub and gensub.)
> Но в production-скрипте она была бы, разумеется.
Не знаю, не знаю...
Это ты сейчас так говоришь, а потом в работе встречаешь таких разноцветных жуков!..
> Блин, да вот тебе патч: вместо "^[[:digit:]]*[[:space:]]*" "^[[:digit:]]*[[:space:]]".
> На один символ экономия!
Я думаю, что если знать fts(3 то проще на сях написать немного подлиннее,
но зато сразу, а не приделывать постепенно костыли, когда обнаружишь нечто
неожиданное.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Не знаю, не знаю...И это ужасно!
Это ты сейчас так говоришь, а потом в работе встречаешь таких разноцветных жуков!..
Я думаю, что если знать fts(3 то проще на сях написать немного подлиннее, но зато сразу, а не приделывать постепенно костыли, когда обнаружишь нечто неожиданное.Лучше на брейнфаке!
Пиши на своём хаскелле.
Это серьёзно. Сваливать данные в общую кучу, чтобы потом
выковыривать их из текстового представления обратно,
когда можно делать дело сразу, просто глупо.
Тем более, что вопрос стоит об организации хранения каких-то
относительно важных данных, раз уж так озабочены поиском повторов,
а не просто удаляют недостаточно свежие файлы.
---
"Значение болевого импульса в нашей жизни неоценимо!"
Сваливать данные в общую кучу, чтобы потом выковыривать их из текстового представления обратно, когда можно делать дело сразу, просто глупо.
Тем более, что вопрос стоит об организации хранения каких-то относительно важных данных, раз уж так озабочены поиском повторов, а не просто удаляют недостаточно свежие файлы.
Я полагал, что ты хочешь заверить тред пенартуриально, но это уже сейчас даже не соображу какой синдром.
> но это уже сейчас даже не соображу какой синдром.
Стремление ставить диагнозы по фотографии и произносить иные слова,
смысла которых не понимаешь, присуще __No__. Можешь называть
это как угодно, это не подсказка.
---
"Мы продолжаем то, что мы уже много наделали."
Оставить комментарий
sasha397
в инете полно прог, я знаю, но как только на чем-либо останавливаешься, находятся отзывы о нестабильной/медленной/etc. работе.поделитесь, чем пользуетесь вы?