Pull to refresh

Comments 157

UFO landed and left these words here
Реализация данного проекта не бесплатна, в нее вкладываются деньги (территориальным управлением по образованию), чтобы каждая конкретная школа могла в нем участвовать. Модернизация образования, ёпрст. Если же участие проходит не слишком активно, то денежки, получается, вложены впустую, — отсюда и вот… Может быть, неверно сказано, что «контролируется прокуратурой», но неактивным предупреждения периодически присылаются, и вот неделю назад мы писали объяснительную в районную прокуратуру.
UFO landed and left these words here
Тема, безусловно, очень интересная, и стоит обсуждения. Как-нибудь обязательно.
UFO landed and left these words here
UFO landed and left these words here
спасибо, попробую.
но, учитывая то, что я активно пользуюсь консолью, мой вариант быстрее :)
UFO landed and left these words here
Наконец-то! Дожили! А то раньше в линукс-темах звучало «нафиг нужен этот гуи, если тоже самое можно сделать одной командой в терминале...»
UFO landed and left these words here
Я вот наоборот. Сначала использовал avidemux, потом, заметив, что выполняю постоянно одни и те же действия, (пережать с фильтром swapuv) написал скрипт с mencoder и пользуюсь им.
UFO landed and left these words here
здорово спасибо за пример из жизни — можно еще скриптов и более детально велосипед обьяснить

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

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

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

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

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

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

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

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

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

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

Выведет: "/bugaga/aaa/SLASH". =)))
Спасиб, буду знать :) Но, как водится, кривое решение приходит в голову быстрее, чем идея погуглить…
Было дело, когда писала конфиг для conky, нужно было выводить ip адрес интерфейса. Пока заметила, что у меня нифига не работает из-за какой-то лишней скобочки, успела написать вырезающий из ifconfig'а скрипт :)
Можно еще проще: echo ${DIR%/}
А после ресайза бывает полезно немного увеличить четкость, тогда снимки выглядят намного приятней (-sharpen, кажется)
Поправьте пожалуйста:
"(а сам ImageMaick и того мощнее)", забыли «g» в слове Magick:)
«Конвертом» можно заодно и подписывать фотографии.
Вместо 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_{}'
парсер лох
если задумаете использовать — замените ковычки
Наглядно — это когда 50 строчек вместо одной?

Скажите уж тогда, что непривычно…
да нет же… я пишу, например, конвейер в одну строку, только если команды не длинные.
здесь же все для наглядности сделано.
UFO landed and left these words here
mogrify перезаписывает исходный файл.
UFO landed and left these words here
хабрадевушка! айда плюсовать!
простите отвлекся. интересное решение, но к сожалению я любитель windows-way решений, поэтому оценить не могу.
недавно стояла задача заресайзить знакомому большую тучу картинок под небольшое разрешение нашлось гуевое решение, ctrl+A и в контекстном меню нужное разрешение(под win естественно)
в windows никто for loops еще тоже не отменял
как трогательно вы с этими «for i in» )
вообще-то, это тривиально, но женский род от первого лица все меняет — _для девушки_ — весьма похвальные достижения в bash-е!
вообще-то, в топике упоминается, что это тривиально, плюс Вам полезно будет почитать, что в том абзаце еще написано.

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

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

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

Намекаете, что любой _девушке_ нужна куча времени для освоения тривиальных вещей? Думаю, за это неплохо было бы и извиниться, тов. Siddthartha.
молодой человек, вы такой справедливый, хватайте пока не убежала, редкий вид, у нее консоль всегда открыта и фотография в купальнике ничего.
а толковать и перетолковывать мои слова — не надо.
Во-первых, я знаю не одну девушку, обладающую этими качествами, у вас выборка недостаточно репрезентативна, во-вторых, я ничьи слова не перетолковывал. Критика тоже принимается, только, почему-то (почему бы это?), не ваша.
Ещё можно оформить в виде скрипта к наутилусу, довольно удобно будет.
Извините за нескромный вопрос, а вы женаты? =)
Эм… Может быть, «замужем», а не «женаты»? (:
Про «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;
про слеш, не забываем, там еще mkdir "$DIR.old";
а во всем остальном, конечно, согласна, просто писалось это «на скорую руку».
Студент МГТУ! Фотку в студию! :)
UFO landed and left these words here
И эти люди потом удивляются почему на Хабре мало девушек.
Скрипт действительно тривиальный и про прокуратуру, возможно, было бы интереснее, но ход мысли мне нравится. А чего фотки в профиле нету?
Да, вот после этого понимаешь зачем нужны все эти смайлики, теги иронии и сарказма. А фотки, что выложил «перволассник» действительно ваши? Всегда же приятно, когда девушка умная, да ещё и красивая.
да, мои. только четырехлетней давности.
Ну так вы же просто красавица! И скрипты пишете, да поди ещё и на машинке вышивать умеете. Золото просто. Ну, правда.
Может давайте всё-таки в приват? А то о вас, malicious, определённое мнение складывается, не противоречащее нику.
«Что, ежели, сестрица,
При красоте такой и петь ты мастерица,-
Ведь ты б у нас была царь-птица!»
ЗЫ Извините — не удержался ;)))
Фотки в профиле есть где-то у 10% пользователей. Чего вы именно данного пользователя своими фотками достаёте? Давайте тогда каждому из 90% в приват напишите.
Догадываюсь, но до последнего надеялся, что на Хабре нет людей с социальным развитием на уровне первоклассника.
Да тысячи их, оказывается. На ЛОРе и то народ более соответствует своему возрасту.
Это конечно все хорошо. Но в гноме уже есть готовый набор скриптов для изменения картинок (масштабирования поворота и тд.), пакет называется: nautilus-image-converter

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



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

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

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

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

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

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

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

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

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

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

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

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

Кстати если у вас гном, то описанный в шапке скрипт можно кинуть в наутилус скриптс, и так же выполнять его по правой кнопке на любом количестве картинок.
трололо. успакойтесь плиз… я устал уже читать ваш бред.
тема треда «Скрипт для....», так что, оставьте нас со своими гуями.
Никто не заставляет вас пользоваться консолью…
Мне кажется в консоли вообще не нужен никакой фейл менеджер.
UFO landed and left these words here
Количество оффтопа в теме приближается к 50%. Хабр уже не тот.
Топикстартер — девушка, разбирающаяся в линуксе. Как такое можно было упустить аудитории Хабра?

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

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

маленькая, но такая же мощная,
всё своё носит с собой, от библиотечного окружения почти не зависит
работает с огромным количеством форматов
Кстати, почитав комменты, поняла, что принято считать, что windows-way для этого дела — скачать ACDSee, крякнуть и воспользоваться одной из его миллиона функций для тех же целей.
Ан нет, настоящий freeware windows-way — это прога Easy Graphic Converter, инсталятор весит 813kb, и умеет она ровно две вещи — конвертацию популярнейших форматов без особых настроек и ресайз, как отдельных файлов, так и папок. Единственный минус — ресайз там не очень умный, придётся отдельно ресайзить горизонтальные и вертикальные фото.
В общем, на статью на хабре не тянет, в отличие от unix-way, но кому-то может быть полезно.
Канонически, юникс-путь: одна функция — один инструмент (как следствие — конвейеры). Вин-вей — решения всё в одном. Так что, EGC — скорее юникс-вей.
Кстати, почитав комменты, поняла, что принято считать, что windows-way для этого дела — скачать ACDSee, крякнуть и воспользоваться одной из его миллиона функций для тех же целей.
Ну вообще-то под Windows можно использовать тот же ImageMagick и аналогичные cmd-скрипты.
Впрочем, можно считать, что это unix-way, портированный под Windows :)
Вот эта штука функционально эквивалентна вашему скрипту, если я ничего не упустил.
#!/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.
он то будет работать, но
* не забывай про случайный слеш в конце
* фотка может быть и вертикальная
*…
Он функционально эквивалентен с точностью до багов. :)
Точно так же resiz'ю,
только я еще с помощью утилиты exiftool выяняю «Оринтацию снимка» — и если надо «convert -rotate ...»
Спасибо! :)
А слеш легко убирается командой realpath. Она ещё и проверит существует ли путь:
$ realpath /home/ ; echo $?
/home
0
$ realpath /home ; echo $?
/home
0
$ realpath /404 ; echo $?
/404: No such file or directory
1
Ещё порекомендую проверять наличие convert следующим способом:
which convert >/dev/null || { echo 'Error: ImageMagick is not installed!' >&2 ; exit 10 ; }
Так и короче, и правильнее :)
Ошибки, конечно же, нужно выводить в stderr
да, предлагали уже такой вариант.
конечно нужно, но этот скрипт «домашний», так сказать =)
Согласен :) Просто сам сталкивался, что иногда если в домашнем и уютном скрипте ошибки идут не туда — при обработке скриптом тысяч файлов можно капитально потеряться в выводе :))
Или вот, разминка для пальцев.

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

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

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

PS ещё можно изучить её противоположность — basename.
статья не о том, что под linux нет гуишных приложений, решающих задачу.
вы предлагаете пользоваться командной строкой windows из-под wine, потому что там есть irfanview, вместо того, чтобы пользоваться консолью linux, где есть convert?
настолько любить windows — паранойя.
Просто в IrfanView нормальный ресайз (Lanczos) — скорее я его фанат. Ничего сложного в запуске приложения с wine консольно тоже естественно нет.
Бррр… какой — то велосипед получается… Любое количество фото ресайзится за пару кликов (я про Win). Пробовал разобраться со скриптами в GIMP — вот это кошмар… Еще — а кроме ресайза никакой обработки не производится? Уровни/кривые, баланс цвета, геометрия и проч? Или тупо ресайзнули и залили, так, чтоб было, и прокуратура (тут я вообще не понял) в покое оставила?
Sign up to leave a comment.

Articles