User Tools

Site Tools


burn.sh

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
burn.sh [2006/11/13 12:25] 205.252.23.7burn.sh [2008/06/11 12:56] (current) – old revision restored 195.35.72.54
Line 1: Line 1:
 +====== burn.sh ======
 +
 +**Parameters**
 +
 +| ''-s''         | Simulate - no real write will be done          |
 +| ''-n <name>''  | Use given name instead of timestamp as CD name |
 +
 +
 +<code bash>
 +#!/bin/bash
 +
 +# set up CD writer options
 +CD_DEVICE="1,0,0"
 +CD_SPEED=16
 +CD_OPTS="burnproof"
 +
 +# set up DVD writer options
 +DVD_DEVICE="/dev/scd0"
 +DVD_SPEED=4
 +
 +# do not touch
 +TOTAL=0
 +ERROR=0
 +
 +################# FUNCTIONS ##########################
 +
 +function showhelp(){
 +cat <<EOF
 +NAME
 +       burn.sh - CD/DVD burning frontend
 +
 +SYNOPSIS
 +       burn.sh [-n <diskname>] path [path [path [...]]]
 +
 +DESCRIPTION
 +       burn.sh is a frontend to mkisofs, cdrecord and growisofs. It accepts
 +       multiple files and directories as arguments which should be burned
 +       to a CD or DVD. burn.sh does some filesystem limitation checks and
 +       decides on its own if a CD or a DVD is created.
 +
 +OPTIONS
 +       -s
 +             Call the burning process in simulation mode
 +       -n <diskname>
 +             Specifies the Joliet name for the new disk if none is given
 +             the current date is used
 +EOF
 +}
 +
 +function checkfiles(){
 +  for file in "$@"
 +  do
 +    # check filename
 +    length=`basename "$file"|wc -c|awk '{print $1}'`
 +    if [ "$length" -gt "64" ]
 +    then
 +      echo "   ERROR $file: filename too long ($length>64chars)"
 +      ERROR=1
 +    fi
 +    # check filesize
 +    if [ -f $file ]
 +    then
 +      size=`du -k "$file"|awk '{print $1}'`;
 +      if [ "$size" -gt "2097152" ]
 +      then
 +        echo "   ERROR $file: file too big (>2GB)"
 +        ERROR=1
 +      fi
 +      let "TOTAL = TOTAL + size"
 +    fi
 +    # recurse directories
 +    if [ -d $file ]
 +    then
 +      checkfiles `find "$file" -maxdepth 1 -mindepth 1`
 +    fi
 +  done
 +}
 +
 +function burn_dvd(){
 +  if [ "$SIMULATE" == "1" ]
 +  then
 +    SIM="-dry-run"
 +  fi
 +  growisofs $SIM -dvd-compat -speed=$DVD_SPEED -Z $DVD_DEVICE -r -J -V "$NAME" $@
 +}
 +
 +function burn_cd(){
 +  if [ "$SIMULATE" == "1" ]
 +  then
 +    SIM="-dummy"
 +  fi
 +  echo -n "mkisofs -V '$NAME' -r -J $@ | cdrecord -v -ignsize $SIM speed=$CD_SPEED "
 +  echo    "driveropts='$CD_OPTS' -eject dev=$CD_DEVICE -data -"
 +  mkisofs -V "$NAME" -r -J $@ | cdrecord -v -ignsize $SIM speed=$CD_SPEED \
 +   driveropts="$CD_OPTS" -eject dev=$CD_DEVICE -data -
 +}
 +
 +################# MAIN ##########################
 +
 +# get parameters
 +while getopts "n:s" OPTION
 +do
 +  case $OPTION in
 +    n ) NAME=$OPTARG;;
 +    s ) SIMULATE=1;;
 +  esac
 +done
 +shift $(($OPTIND - 1))
 +
 +# set name if not set
 +if [ -z "$NAME" ]
 +then
 +  NAME=`date '+%Y%m%d-%H%M'`
 +fi
 +
 +# check for at least one argument
 +if [ -z $1 ]
 +then
 +  showhelp
 +  exit 1
 +fi
 +
 +# check files
 +echo "checking files please wait..."
 +checkfiles "$@"
 +
 +# abort on error
 +if [ "$ERROR" == "1" ]
 +then
 +  echo "An error occured. Please fix and try again"
 +  exit 1
 +fi
 +
 +echo
 +echo "A toal of $TOTAL kilobytes needs to be written"
 +if [ "$SIMULATE" == "1" ]
 +then
 +  echo "Simulation - using name '$NAME'"
 +else
 +  echo "Real Write - using name '$NAME'"
 +fi
 +echo
 +
 +if [ "$TOTAL" -lt "716800" ]
 +then
 +  echo "I think it should fit on a 700MB CD-R"
 +  echo "Insert media and hit enter when ready"
 +  read foo
 +  MEDIA="cd"
 +else
 +  echo "This does not fit on a CD-R - We'll use a DVD-R"
 +  echo "Insert media and hit enter when ready"
 +  read foo
 +  MEDIA="dvd"
 +fi
 +
 +if [ "$MEDIA" == "cd" ]
 +then
 +  if dvd+rw-mediainfo $DVD_DEVICE >/dev/null 2>/dev/null
 +  then
 +    echo "CD-R would suffice but DVD Media detected - Using DVD-R"
 +    MEDIA="dvd"
 +  fi
 +fi
 +
 +echo "------------------------------------------------------------"
 +
 +if [ "$MEDIA" == "cd" ]
 +then
 +  burn_cd "$@"
 +else
 +  burn_dvd "$@"
 +fi
 +</code>
  
burn.sh.txt · Last modified: 2008/06/11 12:56 by 195.35.72.54