У меня есть папка, содержащая много подпапок, полных изображений. См., например, прикрепленное изображение.
По сути, я хочу перебрать их все и уменьшить размер изображений так, чтобы ни одно не было шире 1024 пикселей. Они все в формате jpeg.
Я знаю о командах SIPS, т.е.
sips -Z 1024 *.png
Однако это работает только в том случае, если все изображения находятся в текущем каталоге.
Как настроить его для обхода всех подкаталогов?
решение1
Вы можете запустить его с помощью find:find images/path -type f -name '*.png' -exec sips -Z 1024 {} \;
Find выполнит поиск файлов (-type f) с расширением png (-name '*.png') внутри каталога 'images/path' и выполнит команду в параметре, заменив "{}" на имя файла, команду необходимо закончить "\;".
решение2
Мне удалось изменить небольшой скрипт bash, который у меня заработал
#!/bin/bash
find "foldername" -type f | \
while read file ; do
echo "processing ${file}"
sips -Z 2000 ${file}
done