Pull to refresh

Comments 157

UFO just landed and posted this here
Реализация данного проекта не бесплатна, в нее вкладываются деньги (территориальным управлением по образованию), чтобы каждая конкретная школа могла в нем участвовать. Модернизация образования, ёпрст. Если же участие проходит не слишком активно, то денежки, получается, вложены впустую, — отсюда и вот… Может быть, неверно сказано, что «контролируется прокуратурой», но неактивным предупреждения периодически присылаются, и вот неделю назад мы писали объяснительную в районную прокуратуру.
UFO just landed and posted this here
Тема, безусловно, очень интересная, и стоит обсуждения. Как-нибудь обязательно.
https://test.oshkole.ru/
Nuff said.
UFO just landed and posted this here
UFO just landed and posted this here
спасибо, попробую.
но, учитывая то, что я активно пользуюсь консолью, мой вариант быстрее :)
UFO just landed and posted this here
Наконец-то! Дожили! А то раньше в линукс-темах звучало «нафиг нужен этот гуи, если тоже самое можно сделать одной командой в терминале...»
UFO just landed and posted this here
Я вот наоборот. Сначала использовал avidemux, потом, заметив, что выполняю постоянно одни и те же действия, (пережать с фильтром swapuv) написал скрипт с mencoder и пользуюсь им.
UFO just landed and posted this 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_{}'
парсер лох
если задумаете использовать — замените ковычки
про xargs интересно… но ненаглядно :)
Наглядно — это когда 50 строчек вместо одной?

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


if convert ... ; then
  ....
else
  ...
fi
mogrify перезаписывает исходный файл.
UFO just landed and posted this 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 just landed and posted this here
Девушка… unix-way… bash-скрипт…
Выходи за меня!
И эти люди потом удивляются почему на Хабре мало девушек.
Скрипт действительно тривиальный и про прокуратуру, возможно, было бы интереснее, но ход мысли мне нравится. А чего фотки в профиле нету?
Да, вот после этого понимаешь зачем нужны все эти смайлики, теги иронии и сарказма. А фотки, что выложил «перволассник» действительно ваши? Всегда же приятно, когда девушка умная, да ещё и красивая.
да, мои. только четырехлетней давности.
Ну так вы же просто красавица! И скрипты пишете, да поди ещё и на машинке вышивать умеете. Золото просто. Ну, правда.
Может давайте всё-таки в приват? А то о вас, 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 just landed and posted this 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.
IrfanView прекрасно работает через wine.
статья не о том, что под linux нет гуишных приложений, решающих задачу.
вы предлагаете пользоваться командной строкой windows из-под wine, потому что там есть irfanview, вместо того, чтобы пользоваться консолью linux, где есть convert?
настолько любить windows — паранойя.
Просто в IrfanView нормальный ресайз (Lanczos) — скорее я его фанат. Ничего сложного в запуске приложения с wine консольно тоже естественно нет.
Бррр… какой — то велосипед получается… Любое количество фото ресайзится за пару кликов (я про Win). Пробовал разобраться со скриптами в GIMP — вот это кошмар… Еще — а кроме ресайза никакой обработки не производится? Уровни/кривые, баланс цвета, геометрия и проч? Или тупо ресайзнули и залили, так, чтоб было, и прокуратура (тут я вообще не понял) в покое оставила?
Sign up to leave a comment.

Articles