Как Automator или Applescript могут вращать 500000 изображений в папках и подпапках?

У меня очень специфический вопрос.

У меня есть 500 000 изображений, которые находятся в 98 подпапках. Некоторые из подпапок содержат 25 000 изображений.

Есть ли какой-либо сценарий / автоматизатор рабочего процесса, который я могу использовать?

Я пытался создать рабочий процесс:

  1. Спросите о поиске предметов
  2. Получить содержимое папки (отметьте повтор для каждой найденной подпапки)
  3. Поворот изображения

Он работает нормально, но только для этих папок, где меньше 4096 файлов: я обычно получаю следующее сообщение об ошибке:

Rotate images failed - 1 error too many arguments (12019) -- limit is 4096

Есть ли способ увеличить этот лимит или создать совершенно другой сценарий Apple? Я действительно надеюсь, что кто-то поможет мне с этим.

4 ответа

Если вы не обязаны использовать Automator или AppleScript, просто используйте ImageMagick через оболочку. Вы можете установить ImageMagick через MacPorts , Homebrew или официальный дистрибутив .

Для этого мы позвоним find , Если вы хотите увидеть имена изображений в первую очередь, прежде чем конвертировать их, вставьте echo между -execdir а также convert ,

Вот команда:

find /some/path/ -type f -iname "*.jpg" -execdir convert {} -rotate 90 rot_{} \;

Это будет рекурсивно ...

  • поиск /some/path
  • для файлов
  • с именем *.jpg
  • вызов convert из ImageMagick, с рабочим путем, установленным на путь изображения ( execdir )
  • вращать их 90 степени
  • сохранить их под rot_ + оригинальное имя файла

поскольку find позвоню convert для каждого изображения в отдельности не имеет значения, сколько там файлов на самом деле.

Вы можете просто использовать глотки...

Предполагая, что каждый файл в папках является файлом изображения:

set mainFolder to POSIX path of (path to desktop as text) & "My Folder"
do shell script "find " & quoted form of mainFolder & " \\! -name \".*\" -type f -print0 | xargs -0 sips -r 90"

Вы можете использовать jpegtran, чтобы вращать изображения без потерь. Может быть установлен с brew install libjpeg,

IFS=$'\n'
for f in $(find ~/Folder -iname '*.jpg'); do
    /usr/local/bin/jpegtran -rotate 90 "$f" > "$f.temp"
    [[ $? == 0 ]] && mv "$f.temp" "$f" || echo "$f"
done

Другой вариант - Хейзел. Вы сообщаете Hazel, какие папки (и подпапки) проверять, устанавливаете критерии для файлов, с которыми нужно работать, и действия, которые необходимо предпринять (включая сценарии, сценарии оболочки и рабочие процессы), и Hazel делает все остальное.

Другие вопросы по тегам