2

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

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

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

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

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

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

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

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

4 ответа4

3

Если вы не обязаны использовать 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 для каждого изображения отдельно, не имеет значения, сколько там файлов на самом деле.

0

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

0

Вы можете использовать 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
0

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

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

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .