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

У меня есть фотографии, в папке A они также существуют, в папках B и C. У них одинаковые имена файлов. Как их найти и удалить из папки А? Perl-скрипт или что-то в этом роде было бы идеальным, так как я не люблю загружать программное обеспечение для этой задачи.

5 ответов

Решение

Попробуйте эту команду:

find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -v "$destdir/{}" "$ToDelete"/ \;

Как пользоваться?

Шаг 1: Создайте временный каталог для перемещения в него дубликатов:

ToDelete=/tmp/ToDelete; mkdir -p "$ToDelete"

Шаг 2: Установите destdir в папку FolderA, в которой мы хотим удалить дубликаты фотографий.

destdir=/path/to/FolderA

Шаг 3 перейдите к первому исходному каталогу (FolderB) и выполните команду

cd /path/to/FolderB

find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -v "$destdir/{}" "$ToDelete"/ \;

Шаг 4: Теперь перейдите к следующему исходному каталогу (FolderC) и снова запустите команду

cd /path/to/FolderC

find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -v "$destdir/{}" "$ToDelete"/ \;

Хорошо. Теперь, если вы протестируете команду и увидите результат, удалите echo команда для перемещения дубликатов фотографий в /tmp/ToDelete каталог.

Смотрите тест ниже:

$ ls ~/FolderA    
  1.jpg  2.jpg  6.jpg  7.jpg  8.jpg

$ ls ~/FolderB    
  3.jpg  4.jpg  5.jpg  7.jpg  8.jpg  9.jpg

$ ls ~/FolderC
  6.jpg  7.jpg  8.jpg  9.jpg

$ ToDelete=/tmp/ToDelete; mkdir -p "$ToDelete"
$ ls /tmp/ToDelete/
$ destdir=~/FolderA

$ cd ~/FolderB
/FolderB$ find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec mv -v "$destdir/{}" "$ToDelete"/ \;
  ‘/home/Fischer/FolderA/./8.jpg’ -> ‘/tmp/ToDelete/8.jpg’
  removed ‘/home/Fischer/FolderA/./8.jpg’
  ‘/home/Fischer/FolderA/./7.jpg’ -> ‘/tmp/ToDelete/7.jpg’
  removed ‘/home/Fischer/FolderA/./7.jpg’

/FolderB$ cd ~/FolderC
/FolderC$ find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec mv -v "$destdir/{}" "$ToDelete"/ \;
  ‘/home/Fischer/FolderA/./6.jpg’ -> ‘/tmp/ToDelete/6.jpg’
  removed ‘/home/Fischer/FolderA/./6.jpg’

/FolderC$ ls /tmp/ToDelete/
  6.jpg  7.jpg  8.jpg

/FolderC$ ls -l ~/FolderA
  1.jpg  2.jpg

/FolderC$ C00L ;)

И как это работает?

Когда вы переключаетесь в папку FolderB или FolderC и запускаете команду find, значит, вы ищете в ней любой файл (. обратитесь к текущему каталогу), а затем с помощью команды cmp(используется для сравнения двух файлов побайтно) вы сравниваете каждый файл ({}) в FolderB/FolderC с файлами в destdir(FolderA ($destdir/{})) если они одинаковые, то мы перемещаем этот файл (из папки FolderA во временную директорию в /tmp/ToDelete) со следующей командой mv -exec mv "$destdir/{}" "$ToDelete"/ \;,

Программа findimagedupes должна делать то, что вы просите:

Находит визуально похожие или повторяющиеся изображения

Программа представляет собой простую Perl-программу и может быть запущена из командной строки, но также доступна в виде программного пакета.

Вы могли бы использовать программу fslint

он ищет дубликаты (среди прочего)

fslint можно скачать в центре программного обеспечения. fslint имеет пользовательский интерфейс при открытии программы, первая вкладка о поиске дубликатов. Вы можете указать папку / папки.

больше информации: руководство пользователя fslint

Если это небольшое количество фотографий, вы можете использовать nautilus или другой файловый менеджер

  • перейти в родительскую папку A, B, C
  • поиск.jpg (или расширение файла ваших изображений: .png, .gif, ...)
  • сортировка по алфавиту (обязательно просмотрите исходный путь к файлу)
  • удалите дубликаты файлов, которые вам больше не нужны

В Интернете доступно множество утилит для поиска дубликатов фотографий .Некоторые лучше, чем другие, некоторые быстрее, некоторые просты в использовании, многие бесплатны, а за некоторые нужно платить, чтобы разблокировать полную функциональность.

Выполните поиск в Google с лучшими фразами для поиска дубликатов фотографий, чтобы выяснить, что доступно, и найти тот, который соответствует вашим потребностям.

Другие вопросы по тегам