Intereting Posts
Использовать английский язык для нажатия клавиш с помощью модификаторов IBM DB2 для Linux AMD64 не устанавливается на Debian Jessie, журнал установки предлагает проблему с поставляемым IBM libdb2ure.so Как узнать, кто находится на другом конце псевдотерминального устройства? Проблема с разрешением DNS с Fedora 20 Использование grep для печати всех соответствующих строк, не разделенных пробелом Проверить, если $ 1 ИЛИ $ 2 равны нулю с "-z" – BASH Разрешение IPv4-адреса из DNS с использованием IPv6-адреса хоста (bind9) Использовать sed для исправления сломанных строк новой строки Не удалось выполнить запрос Curl из сценария Ansible playbook Удаление прокомментированных строк в текстовом файле с помощью sed Команда запуска ключа Gnome-terminal linux mint Не удается получить ураганный электрический туннель IPv6 для работы с Fedora перенос конфигурации ядра в другую архитектуру Лучший способ попасть в программирование ядра? Как Linux знает тип файла, с которым он имеет дело?

Изменение размера изображения в скрипте с помощью Imagemagick

Я бы хотел создать сценарий bash для изменения размеров изображений до 800 пикселей.

Мой код не работает в bash, но он работает, используя identify с одним изображением:

 #!/bin/bash for file in ./**/public/uploads/*.*; do width = $(identify -format "%w" ${file}) if [ width > 800 ] then echo $file // resize image fi done exit 0; 

Проблема: я получаю Permission denied в строке 3

Я попробовал решение, данное в одном из ответов ниже:

 #!/bin/bash shopt -s globstar for file in ./**/public/uploads/*.*; do width=$(identify -format "%w" "${file}") if [ "$width" -gt 800 ] then echo "$file" fi done exit 0; 

И теперь я получаю это сообщение об ошибке:

 identify.im6: Image corrupted ./folder/public/uploads/ffe92053ca8c61835aa5bc47371fd3e4.jpg @ error/gif.c/PingGIFImage/952. ./images.sh: line 6: width: command not found ./images.sh: line 7: [integer expression expected 

Я вижу две очевидные проблемы в вашем скрипте. Во-первых, ** предоставляется опцией globstar которая по умолчанию не globstar . Вероятно, вы активировали его в своей интерактивной оболочке, но вам нужно сделать это и для скрипта.

Тогда вы фактически не сравниваете $width а width строки. $ Необходимо в [ ] .

Последняя проблема заключается в том, что некоторые из файлов, с которыми вы работаете, повреждены или нет. В любом случае команда identify терпит неудачу, поэтому $width пуст. Простым решением было бы проверить, пуста ли $width ( -z "$width" ) и сравнивать только если это не ( ! -z "$width" ):

Попробуйте это вместо этого:

 #!/bin/bash shopt -s globstar for file in ./**/public/uploads/*.*; do width=$(identify -format "%w" "${file}") if [[ ! -z "$width" && "$width" -gt 800 ]] then echo "$file" fi done exit 0; 

Проблема (или, по крайней мере, одна из проблем) заключается в том, что вы говорите

 width = $(identify -format "%w" "${file}") 

Вам необходимо устранить пробелы до и после = , например:

 width=$(identify -format "%w" "${file}")