Я сортирую изображения в большой библиотеке изображений, и миниатюры из старой iPhoto-библиотеки все еще там. И мне нужно удалить их, чтобы улучшить скорость сортировки изображений.
Я нашел этот ответ здесь для Linux, но как насчет macOS? Есть ли способ рекурсивного поиска в папке и определения того, *.jpg, *.png, *.bmp, *.jpeg
есть ли на изображении W360 и H270?
Запуск Сьерры 10.12.4
Вот пример 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
Дождитесь завершения.
fd0
imagemagick
или создать алгоритм, используя файлыmdls
. Что-то вродеmdls -raw -name kMDItemPixelWidth file
даст вам ширину файла изображения.