#!/bin/bash usage() { cat <<-EOF backup-dvd [options] Options: -i Defaults to ${dev} -o Defaults to ${out} -n Defaults to volume on disk EOF exit ${1:-0} } dev=/dev/cdrom out=${PWD} vol= eval set -- `getopt -- hi:n:o: "$@"` while [[ -n $1 ]] ; do case $1 in -h) usage;; -i) dev=$2; shift 2;; -o) out=$2; shift 2;; -n) vol=$2; shift 2;; --) shift; break;; -*) usage 1;; *) usage 2; break;; esac done # iso-info mkisofs Application= # -A Preparer= # -p Publisher= # -publisher System= # -sysid Volume=${vol} # -V Volume_Set= # -volset if [[ -z ${Volume} ]] ; then info=$(iso-info ${dev}) || exit 1 eval $(echo "${info}" | awk -F: ' (NF > 1 && $1 !~ /image/) { sub(/ *$/, "", $1); sub(/ /, "_", $1); sub(/^ */, "", $2); print $1 "=\"" $2 "\""; }') fi if [[ -z ${Volume} ]] ; then echo "Unable to parse Volume out of ISO" iso-info ${dev} fi echo "Backing up: ${Volume}" e() { for a ; do [[ ${a} == *" "* || ${#a} == 0 ]] && fmt='"%s"' || fmt='%s' printf "${fmt} " "${a}" done echo "$@" } opts=( -i ${dev} -o "${out}" -n "${Volume}" ) if ! e dvdbackup -M "${opts[@]}" ; then e dvdbackup -F "${opts[@]}" || exit 1 fi e mkisofs -quiet -dvd-video \ -A "${Application}" \ -p "${Preparer}" \ -publisher "${Publisher}" \ -sysid "${System}" \ -V "${Volume}" \ -volset "${Volume_Set}" \ -o "${out}/${Volume}.iso" "${Volume}" du -h "${out}/${Volume}.iso" exec eject