Разные, на мой взгляд, интересные замечания, связанные с компьютерами в частности и техникой вообще.

вторник, 28 апреля 2009 г.

Скрипт работы с cd/dvd-дисками в консоли.

Вот, роясь на просторах винта, откопал старый скрипт для записи/очистки и т.д. дисков в консоли. Писал во времена, когда не признавал почти никаких GUI-приложений.


#!/bin/bash
#
TMPFILE=/home/cppmm/wtmp/cdrom.iso

# Определение действия.

case $1 in
wr)
FUNC="f_write"
;;
cp)
FUNC="f_copy"
;;
cl)
FUNC="f_clear"
;;
ch)
FUNC="f_check"
;;
wi)
FUNC="f_write_iso"
;;
help)
FUNC="f_help"
;;
*)
FUNC="f_help"
;;
esac
shift

# Определение параметров.
until [ -z $1 ]
do
if [ "$1" = "-d" ]
then
DIR="$2"
shift
fi
if [ "$1" = "-s" ]
then
SPEED="$2"
shift
fi
if [ "$1" = "-o" ]
then
ODISK="$2"
shift
fi
if [ "$1" = "-i" ]
then
IDISK="$2"
shift
fi
if [ "$1" = "-f" ]
then
ISO="$2"
shift
fi
shift
done

# Функйия проверки наличия переменных и оповещения.
f_var_check() {
case "$1" in
v_help)
echo "Для справки: cd.sh help"
exit 0
;;
v_dir)
if [ -z "$DIR" ]
then
echo "Нужно указать директорию, подготовленную для записи."
f_var_check v_help
fi
;;
v_odisk)
if [ -z "$ODISK" ]
then
echo "Нужно указать устройство, производящее запись."
f_var_check v_help
fi
;;
v_idisk)
if [ -z "$IDISK" ]
then
echo "Нужно указать устройство, с которого производится копирование."
f_var_check v_help
fi
;;
v_speed)
if [ -z "$SPEED" ]
then
SPEED="4"
echo "Скорость записи не установленна. По-умолчанию 4"
echo "Продолжить? [Y/n]: "
read ANSWER
case $ANSWER in
[nN])
f_var_check v_help
;;
*)
;;
esac
fi
;;
v_eject)
eject -r /dev/${ODISK}
echo "Вставьте записываемый диск и нажмите Enter."
read ready
eject -t /dev/${ODISK}
;;
v_iso)
if [ -z "$ISO" ]
then
echo "Укажите файл образа."
f_var_check v_help
fi
;;
esac
}

# Функция записи дирректории на диск.
f_write() {
f_var_check v_odisk
f_var_check v_dir
f_var_check v_speed
mkisofs -V "Disk" -l -J -R -v -o ${TMPFILE} ${DIR}
f_var_check v_eject
cdrecord -v -dev=/dev/${ODISK} -speed=${SPEED} ${TMPFILE}
rm -f ${TMPFILE}
}

# Функция копирования диска.
f_copy() {
f_var_check v_odisk
f_var_check v_idisk
f_var_check v_speed
dd if=/dev/${IDISK} of=${TMPFILE} bs=2048
f_var_check v_eject
cdrecord -v -dev=/dev/${ODISK} -speed=${SPEED} ${TMPFILE}
rm -f ${TMPFILE}
}

# Функция очистки диска.
f_clear() {
f_var_check v_odisk
cdrecord dev=/dev/${ODISK} -blank=all
}

# Функция проверки размера будующего образа.
f_check() {
f_var_check v_dir
echo "Размерв байтах:"
expr `mkisofs -print-size -quiet $DIR` \* 2084

}

# Функция записи iso-образа.
f_write_iso() {
f_var_check v_odisk
f_var_check v_iso
f_var_check v_speed
cdrecord -v -dev=/dev/${ODISK} -speed=${SPEED} ${ISO}
}

# Функция помощи.
f_help() {
echo " Использование: cd.sh ДЕЙСТВИЕ ОПЦИИ"
echo " Действия:"
echo " wr запись директории на диск."
echo " cp копирование с диска на диск."
echo " cl очистка диска."
echo " ch проверка размера будущего образа диска из директории."
echo " wi запись на диск образа."
echo " Опции:"
echo " -d Директория, подготовленная для записи."
echo " -f Файл ISO."
echo " -i Исходный диск."
echo " -o Диск, подготовленный для записи."
echo " -s Скорость записи."
}

$FUNC

Комментариев нет:

Отправить комментарий