Поиск дубликатов фотографий
У меня есть фотографии, в папке 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 с лучшими фразами для поиска дубликатов фотографий, чтобы выяснить, что доступно, и найти тот, который соответствует вашим потребностям.