Скрипт для обработки фотографий: unix-way среди нас

    Добрый вечер, хабровчане!

    Начну с того, что работаю я в непростой школе простым лаборантом. На мне висит много всяких обязанностей, одной из которых является пополнение школьного сайта и ресурса oshkole.ru контентом.
    Часто приходится выкладывать на этот ресурс фотографии. Но так как написан он о-очень криво (к слову, ведение там странички школы обязательно и контролируется прокуратурой), фотографии конечному пользователю подгружаются в полном размере. Вот и приходится ресайзить по ~30 штук в неделю.

    Так как я любительница unix-way, быстро пришла идея написать bash скрипт.

    Была поставлена цель: легко и непринужденно изменять размер всех изображений в директории. Задача достаточно тривиальная, скриптик был набросан за 5 минут, и… Тут меня осенило: я ведь так давно хотела написать статью на хабр, только было неочем. И вот я здесь =)

    Всем, кому еще не стало скучно, добро пожаловать под кат.


    Итак, приступим.



    Само изменение размера будем осуществлять утилитой convert из набора ImageMagick. Сразу оговорюсь, что эта утилитка очень мощная (а сам ImageMagick и того мощнее) и с ее помощью можно делать очень много всего.
    > convert image_in.jpg -resize 1228800@ image_out.jpg
    Здесь я использую опцию -resize 1228800@. Она означает, что изображение будет иметь площадь в 1228800 пикселей (соответствует разрешению 1280х960). Разумнее использовать здесь именно эту опцию потому, что фотографии могут быть как вертикальной ориентации, так и горизонтальной. Подробнее о возможностях изменения размера изображений можно посмотреть здесь.

    На этом этапе возникла мысль делать это не только для себя =).

    Так, для начала нужно проверить, есть ли на машине convert. Сделаем это так:
    convert > /dev/null
    if [ $? -ne 0 ]; then echo "Error: convert is needed, it's a part of ImageMagick"; fi;

    Поясню запись «if [ $? -ne 0 ]»:
    Скобка "[" соответствует команде test, и про нее можно почитать в man test (1). В $? хранится результат выполнения предыдущей команды. Например, если выполнение было успешно, там будет 0, а если команда не была найдена — 127. Закрывающая скобка "]" выполняет лишь эстетическую функцию.

    Далее. Существует небольшая проблемка — бывает, пользователь указывает в конце адреса "/", например: /home/user/. Как этот слэш убрать человеческим методом, я не нашла, поэтому придумала детский трехколесный:
    if [ -z $1 ]; then $DIR=`pwd`;
    else
      TEMP=`pwd`;
      cd $DIR; TEMP2=`pwd`;
      cd $TEMP;
      DIR=$TEMP2;
      echo $TEMP2;
    fi;

    Заодно здесь решаем использовать текущую директорию, если аргумент не дан.

    Копируем старые файлы...:
    mkdir "$DIR.old";
    for i in `ls $DIR`;
    do
      cp $DIR/$i $DIR.old;
    done

    Для тех, кто не очень понимает «for i in...» советую посмотреть тут.

    Ну и самое главное:
    for i in `ls $DIR`;
    do
      convert $DIR/$i -resize 1228800@ $DIR/$i;
      if [ $? -eq 0 ]; then
        echo "$i successfully resized";
      else k=$[$k+1]; #считаем ошибки
      fi;
    done

    Думаю, на этом этапе все должно быть понятно.

    Итак, долгожданный момент: собираем все вместе. Файл можно скачать здесь.
    #!/bin/sh <br><br>
    #проверяем, установлен ли convert<br>
    convert > /dev/null<br>
    if [ $? -ne 0 ] ; then <br>
      echo "Error: convert is needed, it's a part of ImageMagick" ;<br>
    fi;<br>
    DIR=$1;<br>
    # велосипед, убирающий "/" в конце <br>
    if [ -z $1 ]; then $DIR=`pwd`; <br>
    else<br>
      TEMP=`pwd`;<br>
      cd $DIR; TEMP2=`pwd`; <br>
      cd $TEMP;<br>
      DIR=$TEMP2;<br>
      echo $TEMP2;<br>
    fi; <br>
    #наши старые файлы копируем в DIR.old<br>
    mkdir "$DIR.old";<br>
    for i in `ls $DIR`; <br>
    do<br>
      cp $DIR/$i $DIR.old;<br>
    done;<br>
    ERR=0;<br>
    echo "Start resizing to 1280x960...." <br>
    for i in `ls $DIR`;<br>
    do<br>
      convert $DIR/$i -resize 1228800@ $DIR/$i;<br>
      if [ $? -eq 0 ]; then <br>
        echo "$i successfully resized"; <br>
      else ERR=$[$ERR+1]; #считаем ошибки<br>
      fi;<br>
    done;<br>
    if [ $ERR -eq 0 ]; then <br>
      echo "Job done!";<br>
    else echo "Job done with some errors.";<br>
    fi;<br>
    echo "You can find your old files in $DIR.old"<br>
    #end




    Как запустить скрипт


    Допустим, скрипт с именем «image» лежит у вас в папке /data/scripts, а фотографии, подлежащие обработке — в /data/foto.
    Тогда выполняем команду
    > /data/scripts/image /data/foto
    И, ура!
    Только не забываем дать скрипту права на исполнение:
    > chmod +x /data/scripts/image

    Выводы


    Все, как видим, очень легко и просто. В unix-way нет ничего плохого. Да что там, есть много чего хорошего! Я пользуюсь этим скриптом (теперь) каждый день, плюс еще несколькими скриптами для работы с сетью. И дам вам добрый женский совет: автоматизируйте! =)

    Пишу на хабр впервые, сильно не бейте
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 165
    • +1
      А что это за сайт такой oshkole.ru, что его наполнение обязательно и контролируется прокуратурой?
      • +2
        Реализация данного проекта не бесплатна, в нее вкладываются деньги (территориальным управлением по образованию), чтобы каждая конкретная школа могла в нем участвовать. Модернизация образования, ёпрст. Если же участие проходит не слишком активно, то денежки, получается, вложены впустую, — отсюда и вот… Может быть, неверно сказано, что «контролируется прокуратурой», но неактивным предупреждения периодически присылаются, и вот неделю назад мы писали объяснительную в районную прокуратуру.
        • +2
          Вот эта тема, на самом деле, гораздо интереснее консольного скрипта. Серьезно, не хотите написать на эту тему?
          • 0
            Тема, безусловно, очень интересная, и стоит обсуждения. Как-нибудь обязательно.
          • –1
            https://test.oshkole.ru/
            Nuff said.
        • НЛО прилетело и опубликовало эту надпись здесь
          • +1
            какие?
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                спасибо, попробую.
                но, учитывая то, что я активно пользуюсь консолью, мой вариант быстрее :)
          • +2
            Наконец-то! Дожили! А то раньше в линукс-темах звучало «нафиг нужен этот гуи, если тоже самое можно сделать одной командой в терминале...»
            • НЛО прилетело и опубликовало эту надпись здесь
              • +1
                Я вот наоборот. Сначала использовал avidemux, потом, заметив, что выполняю постоянно одни и те же действия, (пережать с фильтром swapuv) написал скрипт с mencoder и пользуюсь им.
                • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            здорово спасибо за пример из жизни — можно еще скриптов и более детально велосипед обьяснить

            convert > /dev/null
            if [ $? -ne 0 ]; then echo «Error: convert is needed, it's a part of ImageMagick»; fi;

            зачем здесь convert > /dev/null и ;fi;? я в скриптах ноль но знаю С++ поэтому синтксис еще не очень
            • +3
              Вводим команду convert. Если она выполняется (то бишь найдена и есть в системе), то код возврата будет равен нулю. Если команада не найдена (в частности, Вы увидите вывод типа bash: command not found), то код возврата будет положителен (127), то бишь не равен 0.
              Операция ">" означает перенаправление потока вывода. То есть результат выполнения (например, сообщение о том, что команда не найдена) будет не выведено на экран, а направлено на специализированное устройство /dev/null, о котором, я думаю, пояснять не нужно :)
              Опция -ne у команды test означает «not equal».
              fi; означает завершение условного оператора. В баш-скриптах нет способа выделения блоков команд (если ошибаюсь, поправьте), кроме как do-done; и if-else-fi.
              • +1
                which convert плохой вариант?! Даже как-то красивее, без всяких перенаправлений. Наверняка есть еще варианты без вызова самой программы.
              • –1
                запустил на маке половину скрипта- получил :))

                ./scri: line 6: convert: command not found
                ./scri: line 7: [127: command not found
                ./scri: line 14: syntax error near unexpected token `then'
                ./scri: line 14: `if[-z $1]; then $DIR='pwd';'
                • 0
                  Да, конечно, скрипт виноват. Поставьте имеджмаджик.
                  • 0
                    эм, вообще-то скрипт.
                    он как раз проверяет чере трюк с > /dev/null наличие этого самого имеджмаджика.
                    • +1
                      Ну, command not found и то что «запустил на маке половину» наталкивает на мысль на то что его у него нет. А вот это: «syntax error near unexpected token `then'» вкупе опять же с «запустил на маке половину» наталкивает на мысль о том, что что-то не так с операторными скобками.
                  • +2
                    Это стандартная ошибка, типа "./scri: line 7: [127: command not found" говорит лишь о том, что скрипт вы переписывали вручную. В конструкции if [ $? -ne 0 ] все пробелы обязтельны.
                • +2
                  Это не заработает. Вот если convert стоит, но вылетает с ошибкой, тогда конструкция:
                  convert 2>&1 > /dev/null действительно не выведет ничего на экран. В Вашем случае выведет всё равно, так как в девнулл отправили только stdout, забыв про stderr.
                  Если же convert не установлен, то опять же на stderr про это напишет баш. Можно например вот так:
                  BIN=`which convert`
                  if [ -x "$BIN" ]; then echo «convert is here: $BIN»; fi

              • +1
                Всегда пишите аргументы, собираемые из переменных, в кавычках. В противном случае при попытке выполнить convert some folder/some file.jpg ($DIR='some folder', $i='some file') получите много каки.
                • 0
                  спасибо! постоянно забываю про это ><
                  • –1
                    Кстати, вместо велосипеда можно было воспользоваться народной мудростью и сделать
                    DIR=`echo $1 |sed -e 's,\(.\)/$,\1,'`
                • –14
                  ну и геморрой же этот ваш юникс-уей
                  • +4
                    не всегда так однозначно, часто одной небольшой строчкой можно сделать, то что в винде делалось бы полдня включая поиск программ, поиск к ним кряков, запускание одной программы, работы с ней, затем второй с результатами первой и т.д.

                    пока у меня убунту не стала рабочей системой тоже не понимал этого всего, но сейчас замечаю, что некоторые вещи намного сделать быстрее в консоли, чем в использовать гуи, чего под виндой не хватает.
                    • –10
                      на изучение всех этих команд и чтобы научиться писать эффективные скрипты уйдет больше времени, чем традиционным гуишным способом сделать это а ля виндоус-уэй
                      • +2
                        написание эффективных скриптов само по себе не есть цель. и изучение тоже.
                        нужно решить задачу — решаете. параллельно с этим обретаете определенный опыт и навыки.
                        • –3
                          чтобы решить задачу способом, подобным Вашему, нужны знания, если знаний нет или их не хватает, нужно их восполнять, теряя время
                          • +4
                            я не искала тех знаний специально, без практической нужды. возможно, Вы себя просто недооцениваете.
                            • +1
                              Чтобы написать подобный скрипт нужны не намного большие знания нежели чем на поиск и применение соответствующей гуишной программы.
                              • +2
                                дело в том, что да, возмонжо действительно нужно время.
                                первое время…
                                зато девушка получила АВТОМАТИЗИРОВАННЫЙ способ ресайза, потратив 1 раз пусть хоть 3 часа.

                                а вы предлагаете каждый раз открывать acdsee, переходить в папку, выделять, делать ресайз и тд.

                                в итоге со временем кто еще выиграет — большой вопрос.

                                … к тому же скрипты можно объединять, получая то же самое константное время выполнения процесса, а нажатия мышки нет.
                                • +2
                                  Заметьте, это делается один раз и в результате появляются дополнительные скилы для автоматизации всего и вся в дальнейшем.
                                  Ваш же путь — снова и снова изо дня в день повторять бессмысленное машевозилово. Это, безусловно, очень сильно экономит время, ага! Скилы от этого — только кистевой туннельный синдром… :(
                                  Одни раз — хорошо сделать гуем. Каждый день — извините, гуем в этом случае будет пользоваться только идиот или мазохист.
                              • +3
                                >на изучение всех этих команд и чтобы научиться писать эффективные скрипты уйдет больше времени, чем традиционным гуишным способом сделать это а ля виндоус-уэй

                                Возможно. Но изучение и написание скрипта — это делается один раз, а «сделать а-ля виндоус-уэй традиционным гуишным способом» — это делается каждый раз.
                                Почувствуйте разницу.
                          • +2
                            Слеш убирается легко, например:

                            echo '/bugaga/aaa/SLASH/' | sed -e 's/\/$//'

                            Выведет: "/bugaga/aaa/SLASH". =)))
                            • 0
                              Блин, опередили)
                              • +1
                                Спасиб, буду знать :) Но, как водится, кривое решение приходит в голову быстрее, чем идея погуглить…
                                Было дело, когда писала конфиг для conky, нужно было выводить ip адрес интерфейса. Пока заметила, что у меня нифига не работает из-за какой-то лишней скобочки, успела написать вырезающий из ifconfig'а скрипт :)
                              • 0
                                Можно еще проще: echo ${DIR%/}
                                А после ресайза бывает полезно немного увеличить четкость, тогда снимки выглядят намного приятней (-sharpen, кажется)
                              • 0
                                Поправьте пожалуйста:
                                "(а сам ImageMaick и того мощнее)", забыли «g» в слове Magick:)
                              • +1
                                «Конвертом» можно заодно и подписывать фотографии.
                                Вместо for i можно использовать xargs.

                                у меня вся публикация занимала одну строчку

                                ls -1 *.JPG | xargs -I '{}' convert -despeckle -noise 3 -resize 25% -equalize -normalize -font helvetica -draw «text 10,10 KARTz.ru» -box white -blur 1 '{}' '/mnt/server/photo/p_{}'
                                • 0
                                  парсер лох
                                  если задумаете использовать — замените ковычки
                                  • –1
                                    про xargs интересно… но ненаглядно :)
                                    • 0
                                      Наглядно — это когда 50 строчек вместо одной?

                                      Скажите уж тогда, что непривычно…
                                      • 0
                                        да нет же… я пишу, например, конвейер в одну строку, только если команды не длинные.
                                        здесь же все для наглядности сделано.
                                  • +3
                                    which -s convert || { echo "convert is not installed"; exit; }


                                    if convert ... ; then
                                      ....
                                    else
                                      ...
                                    fi
                                    • +5
                                      mogrify -resize 1024 ./*.jpg
                                      • 0
                                        mogrify перезаписывает исходный файл.
                                      • 0
                                        О, тоже лаборант и тоже линуксоид :)
                                        Полный linux-way, если бы после создания миниатюр все бы фотки закачивались по ftp на сервак. Ну и дальше можно много всего вкусного придумать :)
                                        • –1
                                          хабрадевушка! айда плюсовать!
                                          простите отвлекся. интересное решение, но к сожалению я любитель windows-way решений, поэтому оценить не могу.
                                          недавно стояла задача заресайзить знакомому большую тучу картинок под небольшое разрешение нашлось гуевое решение, ctrl+A и в контекстном меню нужное разрешение(под win естественно)
                                          • –2
                                            в windows никто for loops еще тоже не отменял
                                          • –5
                                            как трогательно вы с этими «for i in» )
                                            вообще-то, это тривиально, но женский род от первого лица все меняет — _для девушки_ — весьма похвальные достижения в bash-е!
                                            • –2
                                              вообще-то, в топике упоминается, что это тривиально, плюс Вам полезно будет почитать, что в том абзаце еще написано.

                                              про for… — да, люблю я его )
                                              так сразу всплывают детские воспоминания — basic и все такое…
                                              • –2
                                                >>женский род от первого лица все меняет
                                                хоть это и правда… но не очень приятно, если честно.
                                                • +1
                                                  т.е. когда статью перехваливают, умалчивают о ее проблемах и сыплют комплиментами — в силу гендерного фактора — это вас не оскорбляет, а когда вам высказывают адекватное мнение, без неуместного джентельменства и демонстрации бицепса — это повод для неприязни?

                                                  странная у нас тут эмансипация цветёт.

                                                  PS: может я, конечно, зря так выделил _для девушки_ (на деле тональность комментария была скорее одобрительной) — извините, я не имел в виду что все бабы дуры, скорее что их склонность к доминированию эмоционального интеллекта, редко дает им возможность достичь результатов в математике, и тем приятнее нам видеть эти результаты.
                                              • +3
                                                > _для девушки_ — весьма похвальные достижения в bash-е!

                                                Намекаете, что любой _девушке_ нужна куча времени для освоения тривиальных вещей? Думаю, за это неплохо было бы и извиниться, тов. Siddthartha.
                                                • –1
                                                  поддерживаю!)
                                                  • –2
                                                    молодой человек, вы такой справедливый, хватайте пока не убежала, редкий вид, у нее консоль всегда открыта и фотография в купальнике ничего.
                                                    а толковать и перетолковывать мои слова — не надо.
                                                    • +1
                                                      Во-первых, я знаю не одну девушку, обладающую этими качествами, у вас выборка недостаточно репрезентативна, во-вторых, я ничьи слова не перетолковывал. Критика тоже принимается, только, почему-то (почему бы это?), не ваша.
                                                • –2
                                                  Ещё можно оформить в виде скрипта к наутилусу, довольно удобно будет.
                                                  Извините за нескромный вопрос, а вы женаты? =)
                                                • 0
                                                  Про «convert > /dev/null» уже сказали выше
                                                  Про велосипед со слешем: либо через sed, как было выше, либо вообще не заморачиваться. Сравните результат:
                                                  ls -l /var//tmp
                                                  ls -l /var/tmp

                                                  > for i in `ls $DIR`;
                                                  > do
                                                  > cp $DIR/$i $DIR.old;
                                                  > done
                                                  Лучше так:
                                                  cp "$DIR/*" "$DIR.old/"
                                                  Кавычки на случай, если в имени встретится, например, пробел.

                                                  > for i in `ls $DIR`;
                                                  > do
                                                  > convert $DIR/$i -resize 1228800@ $DIR/$i;
                                                  > if [ $? -eq 0 ]; then
                                                  > echo "$i successfully resized";
                                                  > else ERR=$[$ERR+1]; #считаем ошибки
                                                  > fi;
                                                  > done;
                                                  лучше так
                                                  for i in $DIR/*;
                                                  do
                                                  convert "$i" -resize 1228800@ "$i";
                                                  if [ $? -eq 0 ]; then
                                                  echo "$i successfully resized";
                                                  else ERR=$[$ERR+1]; #считаем ошибки
                                                  fi;
                                                  done;
                                                • –1
                                                  про слеш, не забываем, там еще mkdir "$DIR.old";
                                                  а во всем остальном, конечно, согласна, просто писалось это «на скорую руку».
                                                  • 0
                                                    Девушка! Фотку в студию! :)
                                                    • +6
                                                      Студент МГТУ! Фотку в студию! :)
                                                    • 0
                                                      в 19 лет я ходил по клубам, и не знал такого слова bash… +5 за скрипт. ;)
                                                      • +1
                                                        Девушка… unix-way… bash-скрипт…
                                                        Выходи за меня!
                                                        • +1
                                                          И эти люди потом удивляются почему на Хабре мало девушек.
                                                          • –9
                                                            Знакомьтесь: http://vkontakte.ru/id4483593
                                                            Photo 1
                                                            • –8
                                                              Photo 1
                                                              • –8
                                                                Photo 1
                                                                • –8
                                                                  Я сошел с ума.

                                                                  Photo 1
                                                                  Photo 2
                                                                  • +2
                                                                    Прошу прощения, но как это относится к теме блога или топика? Создайте тему «Кто такая hybridcattt?» в личном блоге, если Вам очень надо.
                                                                    • 0
                                                                      ха, а еще к фотографиям надо подписи читать..)))) четырехлетней давности-то :)
                                                                • +1
                                                                  Вы работаете свахой? Спасибо, мне уже не надо :)
                                                                  • +1
                                                                    У меня нет вконтактов. Так что идите в /dev/null
                                                                • –1
                                                                  Скрипт действительно тривиальный и про прокуратуру, возможно, было бы интереснее, но ход мысли мне нравится. А чего фотки в профиле нету?
                                                                  • 0
                                                                    а зачем? Вы здесь за этим?
                                                                    • –2
                                                                      Да, вот после этого понимаешь зачем нужны все эти смайлики, теги иронии и сарказма. А фотки, что выложил «перволассник» действительно ваши? Всегда же приятно, когда девушка умная, да ещё и красивая.
                                                                      • 0
                                                                        да, мои. только четырехлетней давности.
                                                                        • –2
                                                                          Ну так вы же просто красавица! И скрипты пишете, да поди ещё и на машинке вышивать умеете. Золото просто. Ну, правда.
                                                                          • 0
                                                                            ан нет, не умею :)
                                                                            • –2
                                                                              Может давайте всё-таки в приват? А то о вас, malicious, определённое мнение складывается, не противоречащее нику.
                                                                              • –1
                                                                                напомнило
                                                                              • 0
                                                                                «Что, ежели, сестрица,
                                                                                При красоте такой и петь ты мастерица,-
                                                                                Ведь ты б у нас была царь-птица!»
                                                                                ЗЫ Извините — не удержался ;)))
                                                                        • 0
                                                                          Фотки в профиле есть где-то у 10% пользователей. Чего вы именно данного пользователя своими фотками достаёте? Давайте тогда каждому из 90% в приват напишите.
                                                                          • 0
                                                                            а то Вы не догадываетесь, «чего» :)
                                                                            • 0
                                                                              Догадываюсь, но до последнего надеялся, что на Хабре нет людей с социальным развитием на уровне первоклассника.
                                                                              • +1
                                                                                • 0
                                                                                  Да тысячи их, оказывается. На ЛОРе и то народ более соответствует своему возрасту.
                                                                            • –1
                                                                          • –1
                                                                            Это конечно все хорошо. Но в гноме уже есть готовый набор скриптов для изменения картинок (масштабирования поворота и тд.), пакет называется: nautilus-image-converter

                                                                            И далее в наутилусе выбираем все фотографии которые хотим изменить, в меню выбираем масштабирование:



                                                                            Так что любое количество фотографий можно изменить все в пару кликов.
                                                                            • +3
                                                                              то есть, вы мне предлагаете поставить: наутилус, к нему еще пакет, это все потянет за собой гтк, и тд и тп… ради скрипта, который я и сама могу написать, да еще и использовать его легче?
                                                                              • –8
                                                                                ну тогда надо было указать в начале статьи что мы работаем в кедах или чем то другом. Так как ничего сказано не было считаем что стоит один из самых популярных дистров — убунта. Так что если у вас гном и не хочется парится со скриптами проще поставить этот пакет.
                                                                                • +2
                                                                                  Да откуда ж вы все беретесь?!
                                                                                  linux != ubuntu.
                                                                                  Для меня вот, самый популярный дистрибутив — arch.
                                                                                  • –5
                                                                                    для вас может быть, но я говорю об общей популярности дистрибутивов, и убунта тут выигрывает.
                                                                                    • +1
                                                                                      Это как это самый популярный для вас? Это по числу установок на ваш компьютер что ли? А арч действительно хорош.
                                                                                      • 0
                                                                                        Но вот установка… Особенно для новичков. А так да, достаточно стройный и неплохо организованный.
                                                                                        • +1
                                                                                          По данным distrowatch Ubuntu — самый популярный, но не настолько, чтобы говорить что Linux = Ubuntu, как когда-то говорили browser = IE.
                                                                                          • 0
                                                                                            ни кто об этом и не говорит ;) Так же как ни кто не говорил что нельзя этим скриптом пользоваться из гуи
                                                                                          • +1
                                                                                            По числу установок среди моих знакомых. Убунту неудобна и медленна, вот люди и выбирают иные решения.
                                                                                        • +1
                                                                                          Факторов больше, чем вы считаете. Писать скрипт для одноразового действия не очень разумно. Но выполнять одни и те жу «пару кликов» в гуе десяток раз в неделю тоже глупо.
                                                                                          • 0
                                                                                            Ну, мне показалось разумнее написать цикл с конвертом прямо в командной строке для ресайза 3000 фоток нужно было послать их по почте архивом, чем искать какое-то гуи решение. До этого конвертом я ни разу не пользовался. Честно.
                                                                                          • +1
                                                                                            1) «что мы работаем в кедах или чем то другом. » Мы работаем в командной строке. Но если Вас так интересует, у меня Enlightenment.
                                                                                            2) «Так как ничего сказано не было считаем что» — ? Это только Вы считаете.
                                                                                            3) «один из самых популярных дистров — убунта» :D (извините)
                                                                                            4) «не хочется парится со скриптами». Простите, если я написала эту статью, то эта фраза априори не обо мне. Особенно если бы Вы ее дочитали.
                                                                                            • 0
                                                                                              1. с чего решили что скрипт нельзя использовать не из консоли?
                                                                                              2. если это серверный вариант, тогда можно было еще больше автоматизировать, резайзить и сразу лить на сервак в нужную папку.
                                                                                              3. что есть, то есть
                                                                                              4. ни кто не говорит, что что то не так со скриптом. Речь лишь о том что его или аналогичный можно использовать так же из гуи, что дает большую гибкость в работе.

                                                                                              Почему решили что все должны работать из консоли? Гуй такой же инструмент для работы как и консоль. Если он не нравится вам не значит что он не нравится остальным.
                                                                                              • 0
                                                                                                Вы о чём? ТС уже раз десять сказала, что работает в консоли, но ни разу, что гуй неудобен. А вот я скажу. :)

                                                                                                Гуй неудобен и большую гибкость в работе не даёт, т.к. гуй — это *только* уй (UI), т.е. пользовательский интерфейс. Консоль с текстовыми потоками — это и пользовательский интерфейс и интерфейс для огромного количества утилит по обработке данных. О какой гибкости может идти речь?
                                                                                                • 0
                                                                                                  А я разве ее пытаюсь ее переубедить? Я написал для тех кто работает в гуи и это как один из варинтов обработки картинок.

                                                                                                  Почему должен быть только один способ?
                                                                                        • 0
                                                                                          А этот скрипт используется вообще без кликов :P
                                                                                          • –4
                                                                                            угу, только что бы его запустить, надо:
                                                                                            1. открыть консоль
                                                                                            2. перейти в папку с картинками
                                                                                            3. запустить его

                                                                                            ;)
                                                                                            • 0
                                                                                              А запускать nautilus-image-converter и показывать ему где лежат картинки не нужно? Поделитесь своим libastral.so
                                                                                              • –4
                                                                                                Сразу видно что не пользовались :)

                                                                                                Ну вот ты перешел в дирикторию с картинками, понял что надо изменить размер. Просто выделил нужные и по клику правой кнопки выбрал из меню масштабирование.
                                                                                                • 0
                                                                                                  Для, скажем, 3-5 тысяч картинок это долго. Опять же тумбики будут строится :-)
                                                                                                  • 0
                                                                                                    Из крайности в крайность :)

                                                                                                    Ну скажем если 3-5тыщ, то
                                                                                                    1. можно тот же скрипт пустить из консоли
                                                                                                    2. отключить предпросмотр

                                                                                                    Опять же для того и написал этот метод, что иногда бывает проще из консоли, иногда проще кликнуть правой кнопкой.

                                                                                                    Так же можно не заходит в эту директорию, а прям кликнуть по ней и скормить ее скрипту через правый клик.
                                                                                              • 0
                                                                                                Я понял, что вы имеете в виду! :)

                                                                                                Проблема в том, что, вот, у вас, например, всегда запущен наутилус, а у меня urxvt с zsh.
                                                                                                • –4
                                                                                                  а как тогда с графикой работаете? :)
                                                                                              • +1
                                                                                                еще раз повторяю (хотя поднадоело слегка). консоль у меня постоянно открыта. я ей активно пользуюсь. переходить в папку с «картинками» не нужно (вы бы это поняли, если бы а) прочитали статью; б) понимали бы, о чем говорите). запустить скрипт — от 1 до 5 раз нажать стрелку вверх и ентер.
                                                                                                • +1
                                                                                                  В zsh есть поиск по истории по подстроке. По умолчанию нужно ввести начало команды и листать Ctrl+P Ctrl+N.

                                                                                                  В bash есть reverse-i-search на Ctrl+R. Очень удобно если скрипт далеко, чтобы на нажимать стрелку вверх 20 раз.
                                                                                                  • +1
                                                                                                    а еще есть !prefix
                                                                                                    • +2
                                                                                                      Из учителя превратился в ученика. :) Спасибо.
                                                                                                • 0
                                                                                                  Лучшего файлового менеджера чем mc я не знаю. И быстрый и удобный. Мне проще использовать этот скрипт.
                                                                                                  • –2
                                                                                                    для этого вверху и описан скрипт, а я написал для тех кто хочет сразу видеть картинки и быстро их конвертнуть. Тем более что переключится с клавы намышку лениво, так же как и с мышки на клаву.
                                                                                                    То есть если ты сидишь в консольке, то хватать мышку что бы ресайзнуть одну картинку будет ленно.

                                                                                                    Так же как если ты работаешь с картинками в гимпе/инкскейпе, то что бы конвернуть одну картинку надо выполнить кучу действий, то согласись что по правой кнопке будет горазддо быстрее.

                                                                                                    Кстати если у вас гном, то описанный в шапке скрипт можно кинуть в наутилус скриптс, и так же выполнять его по правой кнопке на любом количестве картинок.
                                                                                                    • +1
                                                                                                      трололо. успакойтесь плиз… я устал уже читать ваш бред.
                                                                                                      тема треда «Скрипт для....», так что, оставьте нас со своими гуями.
                                                                                                      Никто не заставляет вас пользоваться консолью…
                                                                                                    • 0
                                                                                                      Мне кажется в консоли вообще не нужен никакой фейл менеджер.
                                                                                                • 0
                                                                                                  Спасибо за комментарий, раньше приходилось извращаться с phatch для этих же целей
                                                                                                • –2
                                                                                                  Симпатичная девушка ;-)
                                                                                                  • +3
                                                                                                    Количество оффтопа в теме приближается к 50%. Хабр уже не тот.
                                                                                                    • +1
                                                                                                      Топикстартер — девушка, разбирающаяся в линуксе. Как такое можно было упустить аудитории Хабра?

                                                                                                      И да простят меня Боги, но от оффтопа создалось ощущение, что кто-то где-то ВНЕЗАПНО крикнул «Девушка на хабре!» и, сметая все на своем пути, в тему ломанулись сотни человек, которые девушку видели только на фотографии.
                                                                                                      • 0
                                                                                                        Ничего удивительного. Симпатичные девушки, пишущие адекватные статьи на хабре большая редкость. А не тот хабр совсем не из-за таких тем и комментариев… Скорее по причине генерализации тематики.
                                                                                                    • 0
                                                                                                      Есть ещё такая замечательная штука — nconvert
                                                                                                      с xnview.com

                                                                                                      Плюсы по сравнению с ImageMagick:

                                                                                                      маленькая, но такая же мощная,
                                                                                                      всё своё носит с собой, от библиотечного окружения почти не зависит
                                                                                                      работает с огромным количеством форматов
                                                                                                      • 0
                                                                                                        Кстати, почитав комменты, поняла, что принято считать, что windows-way для этого дела — скачать ACDSee, крякнуть и воспользоваться одной из его миллиона функций для тех же целей.
                                                                                                        Ан нет, настоящий freeware windows-way — это прога Easy Graphic Converter, инсталятор весит 813kb, и умеет она ровно две вещи — конвертацию популярнейших форматов без особых настроек и ресайз, как отдельных файлов, так и папок. Единственный минус — ресайз там не очень умный, придётся отдельно ресайзить горизонтальные и вертикальные фото.
                                                                                                        В общем, на статью на хабре не тянет, в отличие от unix-way, но кому-то может быть полезно.
                                                                                                        • 0
                                                                                                          Канонически, юникс-путь: одна функция — один инструмент (как следствие — конвейеры). Вин-вей — решения всё в одном. Так что, EGC — скорее юникс-вей.
                                                                                                        • +3
                                                                                                          Кстати, почитав комменты, поняла, что принято считать, что windows-way для этого дела — скачать ACDSee, крякнуть и воспользоваться одной из его миллиона функций для тех же целей.
                                                                                                          Ну вообще-то под Windows можно использовать тот же ImageMagick и аналогичные cmd-скрипты.
                                                                                                          Впрочем, можно считать, что это unix-way, портированный под Windows :)
                                                                                                          • +2
                                                                                                            Вот эта штука функционально эквивалентна вашему скрипту, если я ничего не упустил.
                                                                                                            #!/bin/sh 
                                                                                                            
                                                                                                            function die {
                                                                                                                echo $1
                                                                                                                exit
                                                                                                            }
                                                                                                            
                                                                                                            #проверяем, установлен ли convert
                                                                                                            which convert >& /dev/null || die "Error: convert is needed, it's a part of ImageMagick"
                                                                                                            
                                                                                                            DIR=$1
                                                                                                            #наши старые файлы копируем в DIR.old
                                                                                                            mkdir "$DIR.old"
                                                                                                            cp $DIR/* $DIR.old/
                                                                                                            
                                                                                                            echo "Start resizing to 1280x960...." 
                                                                                                            mogrify -resize 1280x960 $DIR/* || die "Job done with some errors."
                                                                                                            
                                                                                                            echo "Job done!";
                                                                                                            echo "You can find your old files in $DIR.old"
                                                                                                            


                                                                                                            >& работает в csh и bash.
                                                                                                            • 0
                                                                                                              он то будет работать, но
                                                                                                              * не забывай про случайный слеш в конце
                                                                                                              * фотка может быть и вертикальная
                                                                                                              *…
                                                                                                              • +1
                                                                                                                Он функционально эквивалентен с точностью до багов. :)
                                                                                                          • 0
                                                                                                            Точно так же resiz'ю,
                                                                                                            только я еще с помощью утилиты exiftool выяняю «Оринтацию снимка» — и если надо «convert -rotate ...»
                                                                                                            • +2
                                                                                                              Спасибо! :)
                                                                                                              А слеш легко убирается командой realpath. Она ещё и проверит существует ли путь:
                                                                                                              $ realpath /home/ ; echo $?
                                                                                                              /home
                                                                                                              0
                                                                                                              $ realpath /home ; echo $?
                                                                                                              /home
                                                                                                              0
                                                                                                              $ realpath /404 ; echo $?
                                                                                                              /404: No such file or directory
                                                                                                              1
                                                                                                              • 0
                                                                                                                Ещё порекомендую проверять наличие convert следующим способом:
                                                                                                                which convert >/dev/null || { echo 'Error: ImageMagick is not installed!' >&2 ; exit 10 ; }
                                                                                                                Так и короче, и правильнее :)
                                                                                                                Ошибки, конечно же, нужно выводить в stderr
                                                                                                                • 0
                                                                                                                  да, предлагали уже такой вариант.
                                                                                                                  конечно нужно, но этот скрипт «домашний», так сказать =)
                                                                                                                  • 0
                                                                                                                    Согласен :) Просто сам сталкивался, что иногда если в домашнем и уютном скрипте ошибки идут не туда — при обработке скриптом тысяч файлов можно капитально потеряться в выводе :))
                                                                                                              • +1
                                                                                                                Или вот, разминка для пальцев.

                                                                                                                current_dir=old_path new_dir=new_path && for i in $current_dir; do convert --all-your-options $i $new_dir; done

                                                                                                                Так быстрее выйдет, и модифицировать опции легче, сразу при наборе. А наличие конверт пользователю наполняющему сайты контентом и так известно. :)
                                                                                                                • 0
                                                                                                                  хм[...]do convert --all-your-options $i $new_dir/$i [...]
                                                                                                                • 0
                                                                                                                  # велосипед, убирающий "/" в конце

                                                                                                                  велосипед, действительно. есть команда dirname для этого :)

                                                                                                                  PS ещё можно изучить её противоположность — basename.
                                                                                                                  • –2
                                                                                                                    IrfanView прекрасно работает через wine.