
У меня есть фотографии, в папке A, они также существуют в папках B и C. У них одинаковые имена файлов. Как их искать и удалять из папки A? Скрипт perl или что-то в этом роде было бы идеально, так как я не люблю загружать программное обеспечение для этой задачи.
решение1
Попробуйте эту команду:
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 и запускаетенайти команду, поэтому вы ищете любой файл в нем ( .
ссылаясь на текущий каталог), а затем с помощьюкоманда cmp(используется для побайтового сравнения двух файлов) вы сравниваете каждый файл( {}
) в FolderB/FolderC с файлами в destdir
(FolderA( $destdir/{}
)), если они одинаковы, то мы перемещаем этот файл(из FolderA во временный каталог в /tmp/ToDelete
) со следующимкоманда mv -exec mv "$destdir/{}" "$ToDelete"/ \;
.
решение2
Программаfindimagedupesдолжен сделать то, что вы просите:
Находит визуально похожие или дублирующиеся изображения
Программа представляет собой простую программу на языке Perl и может быть запущена из командной строки, но также доступна в виде программного пакета.
решение3
вы можете использовать программу fslint
он ищет дубликаты (помимо прочего)
fslint можно загрузить в центре программного обеспечения. fslint имеет пользовательский интерфейс. Когда вы открываете программу, первая вкладка посвящена поиску дубликатов. Вы можете указать папку/папки.
Дополнительная информация :руководство пользователя fslint
решение4
Есть многопоиск дубликатов фотографийУтилиты доступны онлайн. Некоторые лучше других, некоторые быстрее, некоторые просты в использовании, многие бесплатны, а за некоторые нужно платить, чтобы разблокировать полную функциональность.
Выполните поиск в Google, используя лучшие фразы для поиска дубликатов фотографий, чтобы выяснить, что доступно, и найти тот, который соответствует вашим потребностям.