Linux: как быстро найти все дубликаты файлов в каталоге?

#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. Создайте контрольную сумму каждого файла, найдите повторяющиеся контрольные суммы, а затем проверьте их специально.

2. unix.stackexchange.com/questions/277697/…