Показал ей как это делается в gThumb. Чуть позже слышу — вздыхает. Смотрю — у неё открыта папка с кучей картинок, а она сидит и ресайзит их, одну за другой: открывает, Image -> Resize, width = 1024, Scale, File -> Save As…
СТОП!
Мой первый рефлекс, естественно, Ctlr-Alt-T, cd куда надо, for f in *.jpg; do convert $f -resize 1024… Жена, однако, с шеллом не знакома и желанием осваивать не горит.
Было бы круто прикрутить пункт в контекстное меню, чтоб он выделенные файлы ресайзил. Но как?
Есть, оказывается такая штука — nautilus-scripts, предназначенная именно для этого.
Суть такова: имена всех исполняемых файлов из
~/.gnome2/nautilus-scripts/
выводятся в подменю Scripts контекстного меню Наутилуса. Выбранный скрипт получает список выделенных файлов в переменной NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
и может делать с ним что хочет, например ресайзить.Важная особенность: имена файлов в переменной разделены переводами строки.
Итак, открываем
$EDITOR
и пишем в ~жена/.gnome2/nautilus-scripts/Resize-1024
:#!/bin/bash
IFS=$'\n' # Разбивать только по переводам строки
for name in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
new_name=`echo "$name" | sed 's/\(.*\)\(\....\)/\1-1024\2/'` # abc.jpg => abc-1024.jpg
[ "$new_name" != "$name" ] && convert "$name" -resize 1024 "$new_name"
done
Гордо представляю на суд жены и получаю первый feature request: дело в том, что работать-то оно работает, но без каких либо внешних проявлений. Как понять, когда всё сделано? Предложение смотреть на CPU usage понимания не находит :)
Долго вспоминаем «как же эта хрень называется»… «Эта хрень» называется Zenity и позволяет выводить из консоли простые диалоговые окна (OK, OK/Cancel), а также progress bar:
(echo "# Делаем раз"; sleep 1; echo "50"; echo "# Делаем два"; sleep 1; echo "50") | zenity --progress
В результате, версия 2.0 выглядит так:
#!/bin/bash
NEW_RES=1024
IFS=$'\n'
n=0
for _ in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do n=$(($n + 1)); done
i=0
for name in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
i=$(($i + 1))
if [ -f "$name" ]; then
bn=`basename "$name"`
echo "# $bn"
new_name=`echo "$name" | sed 's/\(.*\)\(\....\)/\1-'$NEW_RES'\2/'`
[ "$new_name" != "$name" ] && convert "$name" -resize $NEW_RES "$new_name"
fi
echo $(($i * 100 / $n))
done | zenity --progress --auto-close --auto-kill
unset IFS
Источник: Хабрахабр - Linux для всех
Оригинальная страница: Nautilus scripts: действия с выделенными файлами
Комментариев нет:
Отправить комментарий