Поиск дубликатов файлов

Возможно ли найти дубликаты файлов на моем диске, которые бит бит идентичен, но имеют разные имена файлов?

  • Тар перезаписывает файлы только для чтения
  • Разрешения на создание некоторых (но не всех) файлов, видимых непосредственно под каталогом
  • Удалять файлы старше X дней с последним измененным файлом
  • Мониторинг файлов непрерывно с помощью lsof
  • Как найти файл, имя которого содержит заданную строку, например «abcde»?
  • запускать несколько значений из файла по одной команде один за другим
  • Проблема переменных FNR и NR
  • Создание процесса для чтения другого файла для одного и того же имени файла
  • Можно ли перенести дескрипторы файлов в имена файлов?
  • Изменение действия Open Open Folder Folder Folder
  • найти | xargs shasum создает контрольную сумму самого файла контрольной суммы (преждевременно) и не работает при проверке
  • Разница между ctime 1 и ctime +1 в команде find
  • 6 Solutions collect form web for “Поиск дубликатов файлов”

    fdupes может это сделать. От man fdupes :

    Ищет заданный путь для дубликатов файлов. Такие файлы можно найти, сравнив размеры файлов и подписи MD5, а затем побайтовые сравнения.

    В Debian или Ubuntu вы можете установить его с помощью apt-get install fdupes . В Fedora / Red Hat / CentOS вы можете установить его с помощью yum install fdupes . На Arch Linux вы можете использовать pacman -S fdupes , а в Gentoo – emerge fdupes .

    Чтобы запустить проверку по убыванию из корня вашей файловой системы, который, вероятно, займет значительное количество времени и памяти, используйте что-то вроде fdupes -r / .

    Как указано в комментариях, вы можете получить самые большие дубликаты, выполнив следующие действия:

     fdupes -r . | { while IFS= read -r file; do [[ $file ]] && du "$file" done } | sort -n 

    Это сломается, если ваши имена файлов содержат символы новой строки.

    Другим хорошим инструментом является fslint :

    fslint – это набор инструментов для поиска различных проблем с файловыми системами, включая дубликаты файлов и проблемные имена файлов и т. д.

    Отдельные инструменты командной строки доступны в дополнение к графическому интерфейсу и для доступа к ним, можно изменить или добавить в $ PATH каталог / usr / share / fslint / fslint при стандартной установке. Каждая из этих команд в этом каталоге имеет параметр -help, который дополнительно детализирует его параметры.

      findup - find DUPlicate files 

    В дебианских системах вы можете установить его с помощью:

     sudo apt-get install fslint 

    Вы также можете сделать это вручную, если вы не хотите или не можете устанавливать сторонние инструменты. Способ работы большинства таких программ – вычисление контрольных сумм файлов . Файлы с тем же md5sum почти наверняка содержат точно такие же данные. Итак, вы можете сделать что-то вроде этого:

     find / -type f -exec md5sum {} \; > md5sums gawk '{print $1}' md5sums | sort | uniq -d > dupes while read d; do echo "---"; grep $d md5sums | cut -d ' ' -f 2-; done < dupes 

    Пример вывода (имена файлов в этом примере одинаковы, но они также будут работать, когда они будут разными):

     $ while read d; do echo "---"; grep $d md5sums | cut -d ' ' -f 2-; done < dupes --- /usr/src/linux-headers-3.2.0-3-common/include/linux/if_bonding.h /usr/src/linux-headers-3.2.0-4-common/include/linux/if_bonding.h --- /usr/src/linux-headers-3.2.0-3-common/include/linux/route.h /usr/src/linux-headers-3.2.0-4-common/include/linux/route.h --- /usr/src/linux-headers-3.2.0-3-common/include/drm/Kbuild /usr/src/linux-headers-3.2.0-4-common/include/drm/Kbuild --- 

    Это будет намного медленнее, чем уже упомянутые специализированные инструменты, но он будет работать.

    Короткий ответ: да.

    Более длинная версия: взгляните на запись wikipedia fdupes , она имеет довольно хороший список готовых решений. Конечно, вы можете написать свой собственный, это не так сложно – хеширующие программы, такие как diff , sha*sum , find , sort и uniq должны выполнять эту работу. Вы можете даже поставить его на одну строку, и это все равно будет понятно.

    Если вы считаете, что хеш-функция (здесь MD5) не имеет конфликтов в вашем домене:

     find $target -type f -exec md5sum '{}' + | sort | uniq --all-repeated --check-chars=32 \ | cut --characters=35- 

    Хотите, чтобы идентичные имена файлов были сгруппированы? Напишите простой скрипт not_uniq.sh для форматирования вывода:

     #!/bin/bash last_checksum=0 while read line; do checksum=${line:0:32} filename=${line:34} if [ $checksum == $last_checksum ]; then if [ ${last_filename:-0} != '0' ]; then echo $last_filename unset last_filename fi echo $filename else if [ ${last_filename:-0} == '0' ]; then echo "=======" fi last_filename=$filename fi last_checksum=$checksum done 

    Затем измените команду find чтобы использовать ваш скрипт:

     chmod +x not_uniq.sh find $target -type f -exec md5sum '{}' + | sort | not_uniq.sh 

    Это основная идея. Вероятно, вы должны изменить find если ваши имена файлов содержат некоторые символы. (например, пространство)

    В Википедии есть статья ( http://en.wikipedia.org/wiki/List_of_duplicate_file_finders ) со списком доступных программ с открытым исходным кодом для этой задачи, но теперь она удалена .

    Я добавлю, что графическая версия fslint очень интересна, позволяя использовать маску для выбора файлов для удаления. Очень полезно очищать дублированные фотографии.

    В Linux вы можете использовать:

     - FSLint: http://www.pixelbeat.org/fslint/ - FDupes: https://en.wikipedia.org/wiki/Fdupes - DupeGuru: https://www.hardcoded.net/dupeguru/ 

    2 последних работы над многими системами (windows, mac и linux) Я не проверял FSLint

    Вот мой пример:

     find -type f -size +3M -print0 | while IFS= read -r -d '' i; do echo -n '.' if grep -q "$i" md5-partial.txt; then echo -e "\n$i ---- Already counted, skipping."; continue; fi MD5=`dd bs=1M count=1 if="$i" status=noxfer | md5sum` MD5=`echo $MD5 | cut -d' ' -f1` if grep "$MD5" md5-partial.txt; then echo "\n$i ---- Possible duplicate"; fi echo $MD5 $i >> md5-partial.txt done 

    Это отличается тем, что только хэши до 1 МБ файла.
    Это имеет несколько проблем / особенностей:

    • Там может быть разница после первого 1 МБ, поэтому результат скорее будет кандидатом для проверки. Я мог бы это исправить позже.
    • Сначала проверка размера файла может ускорить это.
    • Принимает только файлы размером более 3 МБ.

    Я использую его для сравнения видеороликов, поэтому этого достаточно для меня.

    Linux и Unix - лучшая ОС в мире.