#linux #duplicates #diff
Вопрос:
У меня есть каталог со многими поддирами и в общей сложности более 7000 файлов. Что мне нужно, чтобы найти все дубликаты всех файлов. Для любого данного файла его дубликаты могут быть разбросаны по различным поддирам и могут иметь или не иметь одно и то же имя файла. Дубликат-это файл, в котором вы получаете код возврата 0 от diff
команды.
Самое простое, что можно сделать, — это выполнить двойной цикл по всем файлам в дереве каталогов. Но это 7000^2 последовательных различий и не очень эффективно:
for f in `find /path/to/root/folder -type f`
do
for g in `find /path/to/root/folder -type f`
do
if [ "$f" = "$g" ]
then
continue
fi
diff "$f" "$g" > /dev/null
if [ $? -eq 0 ]
then
echo "$f" MATCHES "$g"
fi
done
done
Есть ли более эффективный способ сделать это?
Комментарии:
1. Создайте контрольную сумму каждого файла, найдите повторяющиеся контрольные суммы, а затем проверьте их специально.