Основа взята отсюда http://www.sakryukin.ru/?module=articles&c=articles&b=8&a=9 . Я несколько упростил сценарий. Но так же добавил автоматическое определение сканера и возможность его указания в специальном файле. В исходном сценарии сканер был жёстко указан в коде. Так же скрипт раскладывает файлы в папках со структурой YYYY/mm/dd
#!/bin/bash
# Чтобы узнать модель вашего сканера, дайте в консоли команду scanimage -L | awk '{print $2}'
# Разрешение в скрипте вписано исходя из возможностей сканера
# Узнать разрешение можно командой scanimage -d ваш_сканер --help
# соответственно, необходимо исправить скрипт в строке выбора разрешений
file_time=$(date +%d-%m-%Y_%H-%M-%S)
# Каталог для отсканированных изображений, строку всегда заканчивать символом /
scans_dir="/mnt/data/scans/"
var_y=$(date +%Y)
var_m=$(date +%m)
var_d=$(date +%d)
# Проверка наличия изпользуемых в скрипте приложений
if [[ ! -f $(which scanimage) ]] || [[ ! -f $(which convert) ]]; then
echo "Нет sane или imagemagick"
exit 0;
fi
if ! [ -f $scans_dir'scaner' ]; then
#Файл с предварительно определённым сканером не найден
echo "Поиск сканера..."
scaners=$(scanimage -L | grep device)
device=$(echo $scaners | awk '{print $2}' | sed "s/[\`']//g" )
echo "Найден сканер " $device
echo "Можно создать файл " $scans_dir'scaner' и написать в него строку $device
#Поиск сканера
fi
if [ -f $scans_dir'scaner' ]; then
echo "Сканер определён заранее содержимым файла " $scans_dir'scaner'
device=$(cat $scans_dir'scaner')
echo "Сканер" $device
echo "Если сканер определён не правильно, удалите этот файл."
fi
if [[ $device != "" ]]; then
echo "Сканирование..."
# Выбор разрешения (dpi)
dpi=300
# Сканирование
file_time=$(date +%d-%m-%Y_%H-%M-%S) ;
scanimage --mode Color --resolution $dpi --device-name=$device > /tmp/$file_time.pnm ;
echo "Сканирование завершено"
# Конвертирование pnm из каталога /tmp/ в jpg
echo "Конвертация в jpeg..."
convert /tmp/$file_time'.pnm' /tmp/$file_time'.jpeg'
echo "Конвертация в закончена"
# Удаляем pnm в каталоге /tmp
echo "Удаление pnm..."
rm /tmp/$file_time'.pnm';
echo "Перемещение файлов"
# Создание подкаталогов если их нет.
if ! [ -d $scans_dir$var_y ]; then
mkdir $scans_dir$var_y
chmod 777 $scans_dir$var_y
fi
if ! [ -d $scans_dir$var_y$'/'$var_m ]; then
mkdir $scans_dir$var_y$'/'$var_m
chmod 777 $scans_dir$var_y$'/'$var_m
fi
if ! [ -d $scans_dir$var_y$'/'$var_m'/'$var_d ]; then
mkdir $scans_dir$var_y$'/'$var_m'/'$var_d
chmod 777 $scans_dir$var_y$'/'$var_m'/'$var_d
fi
cp /tmp/$file_time'.jpeg' $scans_dir$var_y'/'$var_m'/'$var_d'/'
chmod 777 $scans_dir$var_y'/'$var_m'/'$var_d'/'$file_time'.jpeg'
rm -f /tmp/$file_time'.jpeg'
else
# Если сканер не обнаружен
echo "Сканер не подключен"
# Ни и для шику пищим системным биппером (необходимо установленное приложение beep)
if [[ -f $(which beep) ]]; then
beep -f 440,00 -l 100 ;
beep -f 391,99 -l 100 ;
beep -f 261,63 -l 100 ;
beep -f 1 -l 1000 ;
fi
fi
echo "Завершено, файлы находятся в каталоге " $scans_dir$var_y'/'$var_m'/'$var_d'/'
exit 0 ;
Если охото запускать сценарий мышкой и видеть его вывод, то следует запускать его при помощи другого сценария с командой описанной здесь Как в шелле сделать ожидания нажатия любой клавиши? (комментарий)
Скрипт лицензионную под GNU GPL v3