Я скачал много изображений в каталоге.
Загрузчик переименовал файлы, которые уже существуют.
Я также переименовал некоторые файлы вручную.
a.jpg
b.jpg
b(2).jpg
hello.jpg <-- manually renamed `b(3).jpg`
c.jpg
c(2).jpg
world.jpg <-- manually renamed `d.jpg`
d(2).jpg
d(3).jpg
Как удалить дубликаты? Результат должен быть:
a.jpg
b.jpg
c.jpg
world.jpg
примечание: имя не имеет значения. Я просто хочу уникальные файлы.
echo cksm
сразу после строки, начинающейся с,read
если вы хотите видеть хэш каждого файла.**
, он упорядочивает список таким образом, что две папки перемежаются, а не вся папка 1, а затем вся папка 2. Скрипт всегда оставляет первый «оригинал». он попадает по списку. Вы можетеecho $file
передread
строкой проверить, правда ли это.fdupes - инструмент по вашему выбору. Чтобы найти все дубликаты файлов (по содержанию, а не по имени) в текущем каталоге:
Чтобы вручную подтвердить удаление дублированных файлов:
Чтобы автоматически удалить все копии, кроме первой, каждого дублированного файла ( имейте в виду , это предупреждение, фактически удаляет файлы по запросу ):
Я бы рекомендовал вручную проверять файлы перед удалением:
источник
-d '\n'
fdupes -rdN .
где -r рекурсивно, -d - это удаление и -N - без запросаВы можете попробовать FSLint . Он имеет как командную строку, так и графический интерфейс .
источник
Будучи немного ленивым, я быстро нашел его в Интернете .
Сначала вы должны создать контрольную сумму CRC для каждого файла, поскольку вы, очевидно, хотите удалить только точные дубликаты.
Затем переберите этот список файлов, прочитав контрольную сумму, а также имя файла. Если две контрольные суммы совпадают, файл будет удален. Это работает, так как сортировка является числовой и сортирует только по контрольным суммам, которые группируют дубликаты файлов.
Очевидно, это не работает рекурсивно.
источник
Как проверить файлы, имеющие уникальный контент?
Как мы можем получить список файлов в каталоге?
Мы можем получить любые 2 файла из этого списка и проверить, не отличаются ли их имена и содержимое.
Например, у нас есть каталог:
Таким образом, есть только 3 уникальных файла.
Давайте запустим этот скрипт:
И мы получаем только 3 файла.
источник
Я написал этот крошечный скрипт для удаления дублированных файлов
https://gist.github.com/crodas/d16a16c2474602ad725b
В основном он использует временный файл (
/tmp/list.txt
) для создания карты файлов и их хэшей. Позже я использую эти файлы и магию каналов Unix, чтобы сделать все остальное.Скрипт ничего не удалит, но напечатает команды для удаления файлов.
mfilter.sh ./dir | bash
Надеюсь, это поможет
источник
Более краткая версия удаления дублированных файлов (всего одна строка)
find_same_size.sh
источник
Я нашел более простой способ выполнить ту же задачу
источник
Большинство и, возможно, все остальные ответы ужасно неэффективны из-за вычисления контрольной суммы каждого файла в каталоге для обработки.
Потенциально более быстрый подход заключается в том, чтобы сначала получить размер каждого файла, который является почти немедленным (
ls
илиstat
), а затем вычислить и сравнить контрольные суммы только для файлов, имеющих не уникальный размер.источник
Это не то, что вы спрашиваете, но я думаю, что кто-то может найти это полезным, когда контрольные суммы не совпадают, но имя схоже (с суффиксом в скобках). Этот скрипт удаляет файлы с суффиксами как («цифра»)
источник
Я нашел небольшую программу, которая действительно упрощает такие задачи: fdupes .
источник