LINUX.ORG.RU

Посоветуйте софт для поиска дубликатов файлов под Linux

 , ,


1

1

Всех приветствую!

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

По типам файлов для поиска дубликатов важнее всего фото, видео, документы.

Есть что-то такое под Линукс?

Если не найду софт под Линукс, буду цеплять нарды и использовать софт под макось, но лучше бы Линукс, потому что есть ещё 3тб хард в btrfs, на котором часть данных также может дублироваться.

★★★★

rmlint, умеет много разных критериев, достаточно быстр, генерит вывод в виде скрипта/списка/etc.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

В том числе. Есть файлы идентичные 1 в 1. Их обязательно надо найти и удалить дубли.

Есть, например, исходная фотография, и где-нибудь лежит она же с уменьшенным разрешением. Вот такие файлы тоже надо найти и удалить.

ekzotech ★★★★
() автор топика
Ответ на: комментарий от intelfx

Ну, софтина клёвая, видимо. Но хотелось бы что-нибудь с GUI, чтобы можно было быстренько просматривать.

ekzotech ★★★★
() автор топика
Ответ на: комментарий от ekzotech

Есть, например, исходная фотография, и где-нибудь лежит она же с уменьшенным разрешением. Вот такие файлы тоже надо найти и удалить.

А это уже задача для спецсофта, который умеет строить отпечатки изображений.

intelfx ★★★★★
()
Ответ на: комментарий от ekzotech

Но хотелось бы что-нибудь с GUI

Такого не знаю.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Ну, просто есть софт, который умеет такое делать, даже умеет распознавать похожие фотографии с небольшими отличиями. Вот если такое есть под линукс - то будет вообще супер.

ekzotech ★★★★
() автор топика

Для поиска дубликатов файлов есть хорошая программа fdupes. http://pclinuxos.su/forum/index.php?topic=155.0. Всё предельно просто, можно на ходу удалять дубликаты, а можно сохранить в файл список, подредактировать в виде сценария и удалить одним махом все.

Deathstalker ★★★★★
()
Ответ на: комментарий от ilovewindows

Ну, как-то сидеть и закидывать папки, и потом самому смотреть (если я правильно понял) как-то не очень, когда речь идёт про тысячи фотографий, например.

ekzotech ★★★★
() автор топика
Ответ на: комментарий от ekzotech

я тут скомпилял у себя эту вещь. только нифига не въехал в легенду круговой диаграммы, которая строится, и как ей пользоваться. если осилишь - отпишись, плиз.

conalex ★★★
()
Ответ на: комментарий от conalex

Ок, у меня пока ещё часть данных восстанавливается (оффтопик + R-studio), дальше надо перекинуть хард (3тб пока отключен) и загрузить Линукс.

ekzotech ★★★★
() автор топика

Я себе вот такой скриптик написал, не осилив fdupes:

#!/bin/sh
#	2 минуты 12.38 секунд  на 12'989 файлов общим размером 10'026'786'125 байт
#		(стало: 9'919'093'813 байт)
#	1 минута 13.00 секунд на 10'399 файлов общим размером 27'171'656'169 байт
#		(стало: 26'401'660'287 байт)
#	1 минута 17.82 секунд на 8'686 файлов общим размером 11'474'216'791 байт
#		(стало: 11'131'537'062 байт)
#	3 минуты 19.77 секунд на 16'257 файлов общим размером 70'697'892'519 байт
#		(стало: 69'132'667'051 байт)
#
FILELIST="/tmp/filelist_4_mysql"
SQLFILE="/tmp/tmp_4_mysql"
OUTP="/tmp/double_files"
DB="/tmp/filelistdb"

STEP_CNTR=0
#DUP_CNTR=0

if [ "$1" = "-h" ]; then
	echo "Usage: $(basename $0) [-h|-d|-l]"
	echo -e "\t-h\tshow this help"
	echo -e "\t-l\tmake hardlinks for duplicates"
	echo -e "\t-d\tdelete duplicates"
	exit 1
fi

function SQL(){
	echo -e $* | sqlite3 $DB
}

function SQLF(){
	sqlite3 $DB < $SQLFILE
}


function Step(){
	STEP_CNTR=$[$STEP_CNTR + 1 ]
	echo -e "\n\e[1;32m$STEP_CNTR\t\t$*...\e[0m"
}

rm -f $FILELIST $SQLFILE $OUTP $DB

Step "Init database"
SQL "create table files(filename string, filesize integer); create table dups(filename string, filemd5 long);"

Step "Making list of files"
find  -type f -printf "%p\t%s\n" > $FILELIST

Step "Finding files with same size"
cat > $SQLFILE << EOF
delete from files;
.mode tabs
.import /tmp/filelist_4_mysql files
delete from files where filesize in (select filesize from (select filesize,count(*) c from files group by filesize having c = 1) T);
delete from files where filesize = 0;
select filesize from files group by filesize;
EOF

SQLF > $OUTP

cat > $SQLFILE << EOF
delete from dups;
.mode tabs
.import /tmp/filelist_4_mysql dups
delete from dups where filemd5 in (select filemd5 from (select filemd5,count(*) c from dups group by filemd5 having c = 1) T);
select filename from dups group by filemd5;
EOF

Step "Finding duplicates"
while read SIZE
do
	rm -f $FILELIST
	SQL "select filename from files where filesize = $SIZE ;" | while read FILE
	do
		MD=$(sha1sum -b "$FILE" | awk '{print $1}' 2>/dev/null);
		if [ "$MD" != "" ]; then
			echo -e "$FILE\t$MD" >> $FILELIST
		else
			echo -e "\e[1;31;40mCant read MD5 of $FILE\e[0m\nTrace:"
			SQL "select filename from files where filesize = $SIZE;" 
		fi
	done
	SQLF | while read FILE
	do
		echo -e "\n\e[1;41;33m$FILE\e[36m has dublicates:\e[0m"
		SQL "select filename from dups where filemd5 = (select filemd5 from dups where filename = \"$FILE\") AND filename != \"$FILE\";"  | while read D_FILE
		do
			echo -e "\e[1;32;40m$D_FILE\e[0m"
			[ "$1" = "-d" ] && rm -f "$D_FILE" && echo "deleted"
			[ "$1" = "-l" ] && ln -f "$FILE" "$D_FILE" && echo "linked"   #|| ln -fs "$FILE" "$D_FILE" || echo -e "\e[1;31;40merror linking $FILE to $D_FILE!!!\e[0m"
		done
	done
done < $OUTP

Step "Deleting trash"
#echo "delete from files; delete from dups;" 
rm -f $FILELIST $SQLFILE $OUTP $DB

anonymous
()

man 1 fdupes

anonymous
()
Ответ на: комментарий от ekzotech

Есть, например, исходная фотография, и где-нибудь лежит она же с уменьшенным разрешением.

Я сейчас пишу такую. :-) Хочу полный аналог старого вендового ImageDupeless. Гуй я врятли скоро осилю, а вот аналог fdupes только для фотографий - вполне. Прототип уже есть и работает. Месяца через два доведу до ума и выложу.

anonymous
()
Ответ на: комментарий от anonymous

А подробнее можно? Представляю себе так: делаем ЧБ, жмем в максимум шакалов — сравниваем. А как быть с кропнутыми картинками? Делить на квадраты и отдельно сравнивать?

deep-purple ★★★★★
()

пользуюсь fdupes, любимые ключи -rnSd

Заметил, правда, что в каких-то случаях - редко-редко - не видит подкаталоги - пропускает там дубликаты.

record ★★★★★
()
Ответ на: комментарий от deep-purple

Просто ч/б - мало, алгоритм хитрее: 1й ресайз, гаусс, перевод в грейскейл, второй ресайз, бинаризация. Это только для одного битмапа.

У меня например есть измерение процента R/G/B для изображения, очевидное сравнение ratio. В планах отдельные битмапы для luma и пары цветовых каналов (третий цвет выводится на их основе).

Пока что можно потыкать это, эта тулза бралась за исходник.

anonymous
()

coreutils же

find где -type f -exec md5sum '{}' + |
sort |
uniq -w 32 -d
DonkeyHot ★★★★★
()
16 октября 2018 г.
Ответ на: комментарий от anonymous

Скрипт прекрасно крашится на файлах с символом ` в названии А за идею - спасибо!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.