Найдите изображения определенного размера и переместите их в корзину из терминала.

Я сортирую изображения в большой библиотеке изображений, и миниатюры из старой iPhoto-библиотеки все еще там. И мне нужно удалить их, чтобы улучшить скорость сортировки изображений.

Я нашел этот ответ здесь для Linux, но как насчет macOS? Есть ли способ рекурсивного поиска в папке и определения того, *.jpg, *.png, *.bmp, *.jpegесть ли на изображении W360 и H270?

Запуск Сьерры 10.12.4

Вы можете установить imagemagickили создать алгоритм, используя файлы mdls. Что-то вроде mdls -raw -name kMDItemPixelWidth fileдаст вам ширину файла изображения.

Ответы (1)

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

#!/bin/bash

targetDir="$HOME/Pictures"

find "$targetDir" -iname '*.jpg' -o -iname '*.png' -o -iname '*.bmp' -o -iname '*.jpeg' 2>/dev/null | \
while read -r filename; do
    hw="$(sips -g pixelHeight -g pixelWidth "$filename" 2>/dev/null)"
    h="$(awk '/pixelHeight/{print $2}'<<<"$hw")"
    w="$(awk '/pixelWidth/{print $2}'<<<"$hw")"
    if [[ $h -eq 270 ]] && [[ $w -eq 360 ]]; then
        echo rm "$filename"
    fi
done

Все, что вам нужно сделать, это установить targetDir переменную в начальную точку, где вы хотите, чтобы find команда выглядела. По умолчанию это папка «Изображения» в вашей домашней папке.

Примечание. В примере скрипта команду необходимо удалить из начала , чтобы файлы действительно были удалены, и echo чтобы вы могли сначала проверить вывод скрипта относительно того, какие файлы будут удалены. Конечно, вы можете удалить его без тестирования и просто сделать это, если вы уверены, что хотите удалить любой файл .jpg, .png, .bmp или .jpeg с размерами 270 пикселей в высоту на 360 пикселей в ширину в пределах . _
rm "$filename"targetDir

Также обратите внимание, что в зависимости от общего количества файлов с расширениями целевых файлов выполнение этого скрипта может занять некоторое время. В моей системе он нашел ~ 1000 файлов для удаления из 27500 файлов в папке «Мои изображения», и на это ушло не менее 5–10 минут.

Тем не менее, я запустил этот сценарий в том виде, в каком он написан, и единственные файлы, кроме тестового файла, который я создал с целевыми размерами, все остальные файлы были найдены в одном конкретном месте в моем пакете библиотеки iPhoto в папке «Миниатюры». Итак, не проще ли было зайти в бандл и удалить содержимое в Finder? То есть, если это действительно только те миниатюры, от которых вы хотите избавиться!


Если вы не знаете, как использовать скрипт , сделайте в Терминале следующее:

touch delete270x360images
open delete270x360images

Скопируйте и вставьте код скрипта сверху в открытый delete270x360imagesдокумент, измените по мере необходимости/желания, а затем сохраните и закройте.

В Терминале сделайте его исполняемым:

chmod u+x delete270x360images

Теперь, чтобы использовать его в Терминале, введите следующее и нажмите Enter.

./delete270x360images

Дождитесь завершения.