用脚本提升开源生活品质之:光盘刻录

来源:Linuxeden 作者:li-jiahuan
  
作者:linuxeden管理团队成员li-jiahuan
Linux下好用的光盘刻录工具有 k3b(kde),nautilus-cd-burner(gnome),xfburn(xfce)等,
这些图形界面的工具功能强大使用方便。
但当你是一个命令行下的痴汉,或是需要频烦地刻录ISO用来做测试,那GUI工具就不是那么称手了:
 启动,选择文件,设置参数,点几下“下一步”或“开始”,
这是一件低效的工作! *nix的高效,有部分是因为简洁高效的命令行操作方式,本期介绍命令行下
的cdrecord工具cdrecord的主要两个功能:
1、擦除RW光盘的内容
2、刻录iso到光盘

对应的两种用法为:
1、cdrecord dev=$rw_dev blank=fast
2、cdrecord dev=$rw_dev $iso

rw_dev,即记录光驱是如何指定的, 且看"探测刻录光驱是哪个设备"一段
下边是完整脚本,用法见usage函数说明

(下载 http://huan.googlecode.com/svn/bash/mycdrecord.sh )
----------------------------------------------------------
#! /bin/bash

# Author : Jiahuan Li <huanlf@gmail.com>
# License: GPLv2

# Date : 2007/06/22
# Desc : make use of cdrocord to burn cd/dvd disk

ERASE= # 擦除RW光盘
BURN= # 烧刻

## 检查是否已经安装cdrecord
which cdrecord &>/dev/null || {
echo
"cdrecord not installed"
exit 127
}

## 用法
usage () {
cat <<-EOF

$0 功能:擦除RW光盘,刻录ISO
用法:
$0 [ options ] [ xxx.iso ]
options:
-e 擦除RW光盘
-b 刻录
-h 打印本条帮助信息
说明:
对于CD-R/DVD-R来说, 不需要指定options, 指定iso后直接刻录
对于CD-RW/DVD-RW来说, 需要先擦写再记录,即需要指定 -e -b 参数

EOF

exit 1
}

## 要求至少有一个参数
[[ -n $1 ]] || usage


while getopts 'ebh' opt; do
case
$opt in
e)
ERASE=true;;
b)
BURN=true;;
*)
usage;;
esac
done

## 去掉 -e/-b, iso=xxx.iso
shift $(( OPTIND -1 ))

iso=$1

## 检查$iso是否为iso文件
[[ -n
$iso ]] && {
file
$iso | grep -q 'ISO 9660'; RC=$?
[[
$RC != 0 ]] && {
echo
"Target is not a ISO file, aborting ..."
exit 127
}
}

## 导入usb光驱驱动模块, 一般不需要手工导入,udev在开机时会加载
## 止处是防止模块被列入黑名单
#modprobe sr_mod 2>/dev/null
#modprobe sg 2>/dev/null

modprobe sr_mod 2>/dev/null
modprobe sg 2>/dev/null

## 探测刻录光驱是哪个设备
if [[ -e /dev/cdrw ]]; then
rw_dev=/dev/cdrw

elif [[ -e /dev/dvdrw ]]; then
rw_dev=/dvdrw
else
rw_dev=$( cdrecord -scanbus 2>/dev/null | awk '/RW/ {print $1}' )
fi

## 找不到刻录光驱,退出
[[ -z
$rw_dev ]] && {
echo
"Can not found RW device, aborting ..."
exit 127
}
echo
"Found RW device: $rw_dev"

## umount先
umount $rw_dev 2>/dev/null


RC=0

## 如果没有指定要擦除或刻录,则直接刻录( CD-R, DVD-R 盘不用擦,直接刻 )
if [[ -z
"$ERASE$BURN" ]]; then
cdrecord
dev=$rw_dev blank=fast && cdrecord dev=$rw_dev $iso;
else
## 如果指定擦盘
[[ -n
$ERASE ]] && { cdrecord dev=$rw_dev blank=fast; RC=$?; }
## 如果指定刻盘
[[ -n
$BURN ]] && (( RC == 0 )) && [[ -n $iso ]] && cdrecord dev=$rw_dev $iso
fi

## modprobe -r cdrom sg sg_mod sr_mod 2>/dev/null
## 弹出光驱
{ eject && sleep 5 && eject -t; } &>/dev/null &


时间:2009-06-13 12:07 来源:Linuxeden 作者:li-jiahuan 原文链接

好文,顶一下
(6)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量