Для быстрой, в т.ч. массовой, обработки изображений можно расширить контекстное меню Caja после установки пакета caja-image-converter
(http://i.imgur.com/bxv0K7Q.png)
Основные возможности расширения файлового менеджера caja-image-converter:
- Масштабировать картинки можно по готовым профилям размеров изображений (сделать 1280х1024, 1024х768 и так далее), по указанию процента от размера оригинала файла. Помимо этого изображение можно масштабировать по одной стороне (к примеру, нужно получить изображение с шириной 160 пикселей, то при указании только ширины, высота будет установлена пропорционально указанному значению)
(http://i.imgur.com/EVpVegG.png) - Повернуть изображение можно как на любой указанный угол, так и на стандартные значения, которые уже внесены в список по умолчанию (90°, 180° и так далее)
(http://i.imgur.com/e9J1BEl.png)
Крайне необходимым в работе с некоторыми системными файлами оказался скрипт с наименованием Открыть как текст
(http://i.imgur.com/N7ojcUk.png)
Но предпочтения в применении текстовых редакторов могут быть самыми различными. Например, в Matuntu-Y64 мной вместо Pluma были установлены более продвинутые текстовые редакторы Xed и Kate.
Чтобы скрипт работал с конкретным редактором, необходимо внести поправку в текст самого скрипта, размещённого в ~/.config/caja/scripts с изменением в строке, где указан применяемый текстовый редактор: Спойлер
#!/bin/bash
# AUTHOR: (c) Aalexeey :-)
# NAME: Open as a Text
# DESCRIPTION: GUI скрипт для Caja, поможет быстрей открыть файлы типа .desktop
# REQUIRES: pluma
# LICENSE: GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE: http://debianforum.ru/index.php?topic=9141.0
# ICON_USED: /usr/share/icons/gnome-colors-common/16x16/apps/accessories-text-editor.png
file=$CAJA_SCRIPT_SELECTED_URIS
xed $file
fi
Множество скриптов разработчики Mate реализовали в качестве расширений для файлового менеджера. Но тема скриптов ФМ до настоящего времени рассматривается на разных ресурсах, например, на гитхабе (https://github.com/bitsgalore/contextactions), минтовском форуме (https://forums.linuxmint.com/viewtopic.php?t=219329) и т.д.
Показался полезным скрипт Сделать текстовый файл исполняемым Сделать исполняемым
#!/bin/bash
# 20-03-2016 - Titanio
# Web: http://tetratitanio.blogspot.com/
# Licencia: GNU General Public License.
# Instalación: Solo funciona en "Caja", copia este archivo en el directorio ~/.config/caja/scripts y otorgarle permisos de ejecución.
# El script otorga permisos de ejecución al archivo seleccionado.
# Útil para darle permisos a los scripts de CAJA y a cualquier archivo ejecutable descargado de Internet.
path=$CAJA_SCRIPT_SELECTED_FILE_PATHS
path=${path%?}
quoted="file://$path"
chmod +x "$path"
zenity --info --text="The file $path is now executable."
else
Также можно в каталоге размещения скриптов ~/.config/caja/scripts/ создать подкаталоги по тематике, т.е. древовидную структуру скриптов
(https://i.imgur.com/VNWgZq9.png)
Автор скриптов для Caja Aalexeey внёс коррективы в некоторые скрипты и разместил их на форуме русскоязычного сообщества Debian (https://debianforum.ru/index.php/topic,9141.0.html).
Проверка контрольных сумм в современном Mate уже не актуальна, поскольку в Caja встроен плагин Дайджесты для проверки хэш-функции.
Показался интересным скрипт JPG‹–›PNG‹–›PDF, в котором объединены JPG, PNG и PDF конвертеры, добавлен выбор качества и информации о файле, исправлена передача размеров и разрешения
текст скрипта
#!/bin/bash
# AUTHOR: (c) Aalexeey :-)
# NAME: JPG‹–›PNG‹–›PDF
# DESCRIPTION: GUI скрипт для Caja, конвертирует png и jpg в pdf
# REQUIRES: imagemagick, poppler-utils, awk, mate-dialogs-gnome | zenity, mate-notification, libnotify-bin
# LICENSE: GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE: http://debianforum.ru/index.php?topic=9141.0
# ICON_USED: /usr/share/icons/gnome-colors-common/16x16/apps/conduit.png
case $LANG in
ru* )
# Russian (ru-RU)
util="JPG‹–›PNG‹–›PDF"
util_pdf=" в PDF"
util_jpg=" в JPG"
util_png=" в PNG"
conv_out="Как будем конвертировать?"
job_pdf=" PNG или JPG в файл PDF"
job_jpg=" PDF или PNG в файл JPG"
job_png=" JPG или PDF в файл PNG"
file_info=" Вывести информацию о файле"
starting="Проверяю файл ожидайте ..."
conv_level="Качество файла на выходе:"
highq=" Высокое "
mediumq=" Среднее "
lowq=" Низкое "
colo_level="Качество цвета на выходе:"
converting=" Конвертирую выбранный файл\n"
nothing="Ничего не было выбрано"
no_dirs="Директория не выбрана"
terminated="работа скрипта была\nдосрочно прекращена!"
choose_dir="Где сохраняем?"
the_file="Файл"
in_dir="сохранён в выбранном ранее каталоге ..."
wrong_image="Неправильный выбор"
wrong_file="Расширение файла противоречит задаче\nработа скрипта не может быть продолжена!"
job_done="Конвертация была\nуспешно завершена."
job_failed="Работа была прервана\nне конвертировано!";;
esac
allnames=$(echo "$1");
wholename=$(basename "$allnames");
name=${wholename%.*};
# Если ничего не выбрано то сразу выходим из программы
if [[ "$1" == "" ]]; then
zenity --warning --title="$util" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
if ! [[ "$1" =~ \.[pPjJpP][nNpPdD][gGgGfF]$ ]] || [[ "$1" =~ \.[jJ][pP][eE][gG]$ ]]; then
notify-send "$util" "$wrong_file"
zenity --warning --title="$util" --text="$wrong_image\n$terminated" --width 250;
exit 0;
fi
# Выбор каталога для сохранения изображений
save_dir=$(zenity --file-selection --directory --title="$choose_dir");
if [[ "$?" != 0 ]]; then
zenity --warning --title="$util" --text="$no_dirs\n$terminated" --width 250;
exit 0;
fi
savedfile=$(echo "$save_dir/$name");
IFS=$'\t\n';
function jpg2pdf {
# Если выделенный файл png
if [[ "$fileselect" =~ \.[pP][nN][gG]$ ]]; then
png_pdf_job=$(zenity --list --radiolist --title="$util $util_pdf" --column "↓" --column "$colo_level" TRUE "$highq($colors)" FALSE "$mediumq(2700)" FALSE "$lowq(900)" --width=300 --height=200 | sed 's/[^0-9]//g');
if [ "$png_pdf_job" = "" ]; then
zenity --warning --title="$util $util_pdf" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
(
echo
convert -background white -alpha remove -alpha off $fileselect -units PixelsPerInch -density $imagedpi -geometry $resolution $transit_flif &&
echo
convert +dither -colors $png_pdf_job $transit_flif -units PixelsPerInch -density $imagedpi -geometry $resolution $savedfile.pdf
) | zenity --progress --no-cancel --pulsate --text="$converting $name" --auto-close
rm $transit_flif
fi
# Если выделенный файл jpg
if [[ "$fileselect" =~ \.[jJ][pP][gG]$ ]] || [[ "$fileselect" =~ \.[jJ][pP][eE][gG]$ ]]; then
jpg_pdf_job=$(zenity --list --radiolist --title="$util $util_pdf" --column "↓" --column "$conv_level" TRUE "$highq(100%)" FALSE "$mediumq(~90%)" FALSE "$lowq(~60%)" --width=300 --height=200 | sed 's/[^0-9]//g');
if [ "$jpg_pdf_job" = "" ]; then
zenity --warning --title="$util $util_pdf" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
(
echo
convert -background white -alpha remove -alpha off -quality $jpg_pdf_job $fileselect -units PixelsPerInch -density $imagedpi -geometry $resolution $savedfile.pdf
) | zenity --progress --no-cancel --pulsate --text="$converting $name" --auto-close
fi
sleep 0.5
if [ -f "$savedfile.pdf" ]; then
notify-send "$util $util_pdf" "$the_file $name.pdf\n$in_dir"
sleep 0.5
zenity --info --title="$util $util_pdf" --text="$job_done" --width 250;
else
zenity --warning --title="$util $util_pdf" --text="$job_failed" --width 250;
exit 0;
fi
}
function pdf2jpg {
# Если выделенный файл pdf
if [[ "$fileselect" =~ \.[pP][dD][fF]$ ]]; then
pdf_jpg_job=$(zenity --list --radiolist --title="$util $util_jpg" --column "↓" --column "$conv_level" FALSE "$highq(300)" TRUE "$mediumq(150)" FALSE "$lowq(100)" --width=300 --height=200 | sed 's/[^0-9]//g');
if [ "$pdf_jpg_job" = "" ]; then
zenity --warning --title="$util $util_jpg" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
(
echo
#gs -dNOPAUSE -dBATCH -sDEVICE=jpeg -r$pdf_jpg_job -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$savedfile-%d" "$fileselect"
pdftoppm -r $pdf_jpg_job -cropbox -jpeg "$fileselect" "$savedfile"
) | zenity --progress --no-cancel --pulsate --text="$converting $name" --auto-close
fi
# Если выделенный файл png
if [[ "$fileselect" =~ \.[pP][nN][gG]$ ]]; then
png_jpg_job=$(zenity --list --radiolist --title="$util $util_jpg" --column "↓" --column "$conv_level" TRUE "$highq(100%)" FALSE "$mediumq(~90%)" FALSE "$lowq(~60%)" --width=300 --height=200 | sed 's/[^0-9]//g');
if [ "$png_jpg_job" = "" ]; then
zenity --warning --title="$util $util_jpg" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
(
echo
convert $fileselect -background white -alpha remove -alpha off -quality $png_jpg_job -units PixelsPerInch -density $imagedpi -geometry $resolution $savedfile.jpg
) | zenity --progress --no-cancel --pulsate --text="$converting $name" --auto-close
fi
sleep 0.5
if [ -f "$savedfile.jpg" ] || [ -f "$savedfile-1.jpg" ]; then
notify-send "$util $util_jpg" "$the_file $name*.jpg\n$in_dir"
sleep 0.5
zenity --info --title="$util $util_jpg" --text="$job_done" --width 250;
else
zenity --warning --title="$util $util_jpg" --text="$job_failed" --width 250;
exit 0;
fi
}
function jpg2png {
# Если выделенный файл pdf
if [[ "$fileselect" =~ \.[pP][dD][fF]$ ]]; then
pdf_png_job=$(zenity --list --radiolist --title="$util $util_png" --column "↓" --column "$conv_level" FALSE "$highq(300)" TRUE "$mediumq(150)" FALSE "$lowq(100)" --width=300 --height=200 | sed 's/[^0-9]//g');
if [ "$pdf_png_job" = "" ]; then
zenity --warning --title="$util $util_png" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
(
echo
#gs -dNOPAUSE -dBATCH -sDEVICE=png16m -r$pdf_png_job -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$savedfile-%d" "$fileselect"
pdftoppm -r $pdf_png_job -cropbox -png "$fileselect" "$savedfile"
) | zenity --progress --no-cancel --pulsate --text="$converting $name" --auto-close
fi
# Если выделенный файл jpg
if [[ "$fileselect" =~ \.[jJ][pP][gG]$ ]] || [[ "$fileselect" =~ \.[jJ][pP][eE][gG]$ ]]; then
jpg_png_job=$(zenity --list --radiolist --title="$util $util_png" --column "↓" --column "$colo_level" TRUE "$highq($colors)" FALSE "$mediumq(2700)" FALSE "$lowq(900)" --width=300 --height=200 | sed 's/[^0-9]//g');
if [ "$jpg_png_job" = "" ]; then
zenity --warning --title="$util $util_png" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
(
echo
convert $fileselect -units PixelsPerInch -density $imagedpi -geometry $resolution $transit_flif &&
echo
convert +dither -colors $jpg_png_job $transit_flif -background white -alpha remove -alpha off -units PixelsPerCentimeter -density $imageppcm -geometry $resolution $savedfile.png
) | zenity --progress --no-cancel --pulsate --text="$converting $name" --auto-close
rm $transit_flif
fi
sleep 0.5
if [ -f "$savedfile.png" ] || [ -f "$savedfile-1.png" ]; then
notify-send "$util $util_png" "$the_file $name*.png\n$in_dir"
sleep 0.5
zenity --info --title="$util $util_png" --text="$job_done" --width 250;
else
zenity --warning --title="$util $util_png" --text="$job_failed" --width 250;
exit 0;
fi
}
# Цикл перебора выделенных файлов
for fileselect in `echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`
do
notify-send "$util" "$starting"
#Вывести информацию о файле
fileinfo=$(identify -verbose $fileselect);
#Определение разрешения оригинала
imagedpi=$(identify -units PixelsPerInch -format "%x" $fileselect | awk '{print sprintf("%.0f",$0/2)*2}');
imageppcm=$(bc<<<"scale=3;$imagedpi/2.53968" | awk '{printf("%.2f \n",$1)}');
xresolution=$(identify -units PixelsPerInch -format "%[fx:w]" $fileselect);
yresolution=$(identify -units PixelsPerInch -format "%[fx:h]" $fileselect);
resolution=$(echo "$xresolution"x"$yresolution");
#Качество цвета транзитного flif
transit_flif=$(echo "/tmp/$name.flif");
colors=$(identify -format "unique_colors:%k" $fileselect | sed 's/[^0-9]//g' | head -c 6);
# Если выделенный файл jpg
if [[ "$fileselect" =~ \.[jJ][pP][gG]$ ]] || [[ "$fileselect" =~ \.[jJ][pP][eE][gG]$ ]]; then
selectedjpg=`zenity --list --radiolist --title="$util" --column "↓" --column "$conv_out" TRUE "$job_pdf" FALSE "$job_png" FALSE "$file_info" --width=300 --height=200`;
if [ "$selectedjpg" = "$job_pdf" ]; then
# то вызываем функцию конвертирования
jpg2pdf
elif [ "$selectedjpg" = "$job_png" ]; then
# то вызываем функцию конвертирования
jpg2png
elif [ "$selectedjpg" = "$file_info" ]; then
echo "$fileinfo" | zenity --text-info --title="$util" --width 700 --height=500;
elif [ "$?" = 1 ]; then
zenity --warning --title="$util" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
# Если выделенный файл png
elif [[ "$fileselect" =~ \.[pP][nN][gG]$ ]]; then
selectedpng=`zenity --list --radiolist --title="$util" --column "↓" --column "$conv_out" TRUE "$job_pdf" FALSE "$job_jpg" FALSE "$file_info" --width=300 --height=200`;
if [ "$selectedpng" = "$job_pdf" ]; then
# то вызываем функцию конвертирования
jpg2pdf
elif [ "$selectedpng" = "$job_jpg" ]; then
# то вызываем функцию конвертирования
pdf2jpg
elif [ "$selectedpng" = "$file_info" ]; then
echo "$fileinfo" | zenity --text-info --title="$util" --width 700 --height=500;
elif [ "$?" = 1 ]; then
zenity --warning --title="$util" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
# Если выделенный файл pdf
elif [[ "$fileselect" =~ \.[pP][dD][fF]$ ]]; then
selectedpdf=`zenity --list --radiolist --title="$util" --column "↓" --column "$conv_out" TRUE "$job_png" FALSE "$job_jpg" FALSE "$file_info" --width=300 --height=200`;
if [ "$selectedpdf" = "$job_png" ]; then
# то вызываем функцию конвертирования
jpg2png
elif [ "$selectedpdf" = "$job_jpg" ]; then
# то вызываем функцию конвертирования
pdf2jpg
elif [ "$selectedpdf" = "$file_info" ]; then
echo "$fileinfo" | zenity --text-info --title="$util" --width 700 --height=500;
elif [ "$?" = 1 ]; then
zenity --warning --title="$util" --text="$nothing\n$terminated" --width 250;
exit 0;
fi
fi
done
fi
Немного переработан + fakeroot скрипт deb_Repacker
текст скрипта
#!/bin/bash
# AUTHOR: (c) Aalexeey :-)
# NAME: deb Repacker
# DESCRIPTION: GUI скрипт для Caja, для разборки и сборки deb пакетов
# REQUIRES: awk| gawk | mawk, dpkg, fakeroot, mate-dialogs-gnome | zenity, mate-notification, libnotify-bin
# LICENSE: GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE: http://debianforum.ru/index.php?topic=9141.0
# ICON_USED: /usr/share/icons/gnome-colors-common/16x16/actions/extract-archive.png
case $LANG in
ru* )
# Russian (ru-RU)
util="deb_Repacker"
target="Поставленная задача"
rebuild="Воссоздать deb пакет"
fakeroot="Воссоздать пакет с fakeroot"
extract="Распаковать deb пакет"
cancel="Работа скрипта прекращена!"
deb_file="Для запуска скрипта выделяйте deb файл"
no_deb="Не был выбран Debian пакет!"
refused="Вы отказались от намеченного"
deb_folder="Содержимое deb пакета в папке"
unpacking="удалён, ждите распаковывается"
choose="Выберите подготовленный каталог, должен быть!"
no_folder="Ни один каталог не выбран."
md5_gen="сгенерирован, ожидайте...."
deb_build="Собирается ваш deb пакет, возможно,\nэтот процесс займёт некоторое время!"
deb_save="Ваш пакет сохранён в одной\nс его каталогом директории."
panic="Что то пошло совсем не так,\nвозможно это файл <b>control</b>,"
cyrilic="кодировка символов имени \nдиректории и.т.п.";;
esac
fileselect="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
filetype=$(file -b $fileselect | awk '{ print $1}' | tr -d '\n')
defaultdir="./"`basename $1 .deb`"[new]"
dirlog=`basename $1 .deb`"[new]"
selectedjob=$(zenity --list --radiolist --title="$util" --column "↓" --column "$target" FALSE "$rebuild" TRUE "$fakeroot" FALSE "$extract" --width=300 --height=200);
if [ "$?" = 1 ]; then
zenity --warning --title="$util" --text="$refused\n$cancel" --width=300
exit 0;
fi
if [ "$filetype" != "Debian" ] && [ "$selectedjob" = "$extract" ]; then
notify-send "$util" "$deb_file"
zenity --warning --title="$util" --text="$no_deb\n$cancel" --width=300
exit -1;
fi
if [ "$selectedjob" = "$extract" ]; then
dpkg-deb -R $fileselect $defaultdir/ | notify-send "$util" "md5sums $unpacking"
rm $defaultdir/DEBIAN/md5sums
rm $defaultdir/DEBIAN/md5sum
cat /tmp/deb_repack_dpkg.log
echo -n "$dirlog" > /tmp/deb_repack_dpkg.log
sleep 1
zenity --info --title="$util" --text="$deb_folder\n$defaultdir" --width=300
exit 0;
fi
savedlog=`cat /tmp/deb_repack_dpkg.log`
dirselect=$(zenity --file-selection --directory --title="$choose $savedlog");
if [ "$?" = 1 ]; then
zenity --warning --title="$util" --text="$no_folder\n$cancel" --width=300
exit 0;
fi
if [ "$selectedjob" = "$rebuild" ]; then
cd $dirselect && find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > $dirselect/DEBIAN/md5sums
notify-send "$util" "md5sums $md5_gen"
dpkg-deb -b $dirselect | zenity --progress --no-cancel --pulsate --text="$deb_build" --auto-close --width=300
cp /dev/null /tmp/deb_repack_dpkg.log
sleep 1
fi
if [ "$selectedjob" = "$fakeroot" ]; then
cd $dirselect && find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > $dirselect/DEBIAN/md5sums
notify-send "$util" "md5sums $md5_gen"
fakeroot dpkg-deb -b $dirselect | zenity --progress --no-cancel --pulsate --text="$deb_build" --auto-close --width=300
cp /dev/null /tmp/deb_repack_dpkg.log
sleep 1
fi
if [ -f "$dirselect.deb" ]; then
zenity --info --title="$util" --text "$deb_save" --width=300
else
zenity --error --title="$util" --text "$panic\n$cyrilic\n$cancel" --width=300
exit 0;
fi
С остальными скриптами можно ознакомиться по приведённой выше ссылке.