Как найти дубликаты файлов (сначала по размеру, затем по MD5-хешу)

find . -type f -not -empty -printf "%-25s%p\n"|sort -n|uniq -D -w25|cut -b26-|xargs -d"\n" -n1 md5sum|sed "s/ /\x0/"|uniq -D -w32|awk -F"\0" 'BEGIN{l="";}{if(l!=$1||l==""){printf "\n%s\0",$1}printf "\0%s",$2;l=$1}END{printf "\n"}'|sed "/^$/d"


Эта команда выполняет поиск дубликатов файлов в текущем каталоге и его подкаталогах. Сначала она ищет файлы (-type f) с ненулевым размером (-not -empty) и выводит их размер и путь к ним в формате «%-25s%p\n». Затем сортирует результаты по размеру (sort -n) и оставляет только повторяющиеся строки с одинаковыми размерами (uniq -D -w25).

Далее, команда обрезает первые 25 символов (cut -b26-) для удаления размера файла и оставления только пути к файлу. Затем она вычисляет MD5-хеш каждого из этих файлов (xargs -d»\n» -n1 md5sum) и заменяет два пробела между хешем и путем на символ с кодом 0 (sed «s/ /\x0/»).

Затем она снова убирает повторяющиеся строки по хешу (uniq -D -w32) и использует awk с разделителем символа с кодом 0 (awk -F»\0″) для вывода списка дубликатов в формате «хеш\0путь».

Наконец, sed «/^$/d» удаляет пустые строки из вывода.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *