#!/bin/bash OUTPUT_DIR_DVD="/srv/samba/share/DVD" SOURCE_DRIVE="/dev/cdrom" LOCK_FILE="/home/username/autorip.lock" LOG_FILE="/srv/samba/share/autorip.log" TEMP_MNT_DIR="/mnt/cdrom" OUTPUT_DIR_VIDEO="/srv/samba/share/VIDEOS" DISK_CD=`udevadm info -q env -n $SOURCE_DRIVE | grep 'ID_CDROM_MEDIA_CD'` DISK_DVD=`udevadm info -q env -n $SOURCE_DRIVE | grep 'ID_CDROM_MEDIA_DVD'` DISK_BD=`udevadm info -q env -n $SOURCE_DRIVE | grep 'ID_CDROM_MEDIA_BD'` function beep_start() { beep -f 1400 -l 250 } function beep_success() { beep -f 750 -l 80 -r 5 -D 20 } function beep_failure() { beep -f 200 -l 900 } function check_dvd_dir() { BASE=$1 N=0 DIR=$DVD_TITLE echo -n "path ${BASE}/${DVD_TITLE}" while [ -d "${BASE}/${DVD_TITLE}" ]; do echo " ...already exists." N="$(printf "%03d" $[$N+1])" DVD_TITLE="${DIR}_$N" echo -n "path ${BASE}/${DVD_TITLE}" done echo " ...is OK!" } { # Only run if not already running if [ -f "${LOCK_FILE}" ]; then echo "*** autorip.sh - Lock file present" exit 9 fi touch "${LOCK_FILE}" #~~~~ CD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if [ -n "$DISK_CD" ]; then beep -r 1 echo $'\n'=== $(date) - Ripping CD === # just in case script running as root, we supply conf file explicitly: abcde -c /home/username/.abcde.conf if [ $? -ne 0 ]; then # abcde failed echo "*** Error during abcde" beep_failure sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- exit 1 fi beep_success sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- #~~~~ DVD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ elif [ -n "$DISK_DVD" ]; then beep -r 2 echo $'\n'=== $(date) - Ripping DVD === # Grab the DVD title DVD_TITLE=$(/sbin/blkid -o value -s LABEL $SOURCE_DRIVE) # Replace spaces with underscores DVD_TITLE=${DVD_TITLE// /_} echo Disk Label: $DVD_TITLE # try to mount cdrom mount "${TEMP_MNT_DIR}" if [ $? -ne 0 ]; then # disk not mounted echo "*** Could not mount disk" eject $SOURCE_DRIVE beep_failure sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- exit 2 fi # Check for presence of DVD structure if [ ! -d "${TEMP_MNT_DIR}/VIDEO_TS" ]; then # not a DVD, so just try to copy files echo "*** DVD structure not present - just copying files..." check_dvd_dir ${OUTPUT_DIR_VIDEO} echo Directory: $DVD_TITLE cp -R ${TEMP_MNT_DIR} "${OUTPUT_DIR_VIDEO}/${DVD_TITLE}" if [ $? -ne 0 ]; then echo "*** Error during file copy" umount "${TEMP_MNT_DIR}" eject $SOURCE_DRIVE beep_failure sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- exit 3 fi chmod -R u+w "${OUTPUT_DIR_VIDEO}/${DVD_TITLE}" umount "${TEMP_MNT_DIR}" else echo "*** DVD structure present" check_dvd_dir ${OUTPUT_DIR_DVD} echo Directory: $DVD_TITLE # Backup the DVD to hard drive dvdbackup -i $SOURCE_DRIVE -o $OUTPUT_DIR_DVD -M -n $DVD_TITLE if [ $? -ne 0 ]; then # dvdbackup failed echo "*** Error during dvdbackup" eject $SOURCE_DRIVE beep_failure sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- exit 4 fi fi # Success! eject $SOURCE_DRIVE beep_success sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- #~~~~ BD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ elif [ -n "$DISK_BD" ]; then beep -r 3 echo $'\n'=== $(date) - Ripping BD === beep_success sleep 5 rm "${LOCK_FILE}" echo --- $(date) - finished --- #~~~~ unknown ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ else rm "${LOCK_FILE}" fi } &>> $LOG_FILE &