Как Automator или Applescript могут вращать 500000 изображений в папках и подпапках?
У меня очень специфический вопрос.
У меня есть 500 000 изображений, которые находятся в 98 подпапках. Некоторые из подпапок содержат 25 000 изображений.
Есть ли какой-либо сценарий / автоматизатор рабочего процесса, который я могу использовать?
Я пытался создать рабочий процесс:
- Спросите о поиске предметов
- Получить содержимое папки (отметьте повтор для каждой найденной подпапки)
- Поворот изображения
Он работает нормально, но только для этих папок, где меньше 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 делает все остальное.