<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://l9000.net/index.php?action=history&amp;feed=atom&amp;title=Backupgame.sh</id>
	<title>Backupgame.sh - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://l9000.net/index.php?action=history&amp;feed=atom&amp;title=Backupgame.sh"/>
	<link rel="alternate" type="text/html" href="https://l9000.net/index.php?title=Backupgame.sh&amp;action=history"/>
	<updated>2026-05-16T01:11:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://l9000.net/index.php?title=Backupgame.sh&amp;diff=140&amp;oldid=prev</id>
		<title>Ju at 17:51, 10 February 2019</title>
		<link rel="alternate" type="text/html" href="https://l9000.net/index.php?title=Backupgame.sh&amp;diff=140&amp;oldid=prev"/>
		<updated>2019-02-10T17:51:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Script to rip and compress game console media. Needs cdrdao and p7zip installed.&lt;br /&gt;
File format will be CUE/BIN (with backup of TOC) in a 7z archive.&lt;br /&gt;
Assists with multi-disc games also.&lt;br /&gt;
You probably need to change ROMPATH and TMPPATH to suit your needs. As always, use at your own risk.&lt;br /&gt;
[//{{SERVERNAME}}/files/licenses/gpl-3.0.txt Click here] to see the license text for this script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# backupgame.sh 0.2 by Ju&lt;br /&gt;
# Rips and compresses video game discs&lt;br /&gt;
#&lt;br /&gt;
# 0.2 changes:&lt;br /&gt;
# - swap position of Disc no. and Region in file names (+space separated) to match RetroArch database&lt;br /&gt;
# - suggest entering the full region name (ie. USA instead of U), also to match rdb&lt;br /&gt;
&lt;br /&gt;
# User configuration&lt;br /&gt;
&lt;br /&gt;
ROMPATH=&amp;quot;$HOME/yourROMfolder&amp;quot;&lt;br /&gt;
TMPPATH=&amp;quot;/tmp&amp;quot;&lt;br /&gt;
CONFFILE=&amp;quot;$HOME/.backupgamerc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Config file sourced below only contains the game information saved last time&lt;br /&gt;
&lt;br /&gt;
. $CONFFILE&lt;br /&gt;
&lt;br /&gt;
trap ctrl_c INT&lt;br /&gt;
&lt;br /&gt;
function ctrl_c() {&lt;br /&gt;
        echo &amp;quot;User abort, cleaning up...&amp;quot;&lt;br /&gt;
	cleanup&lt;br /&gt;
	exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function cleanup {&lt;br /&gt;
	if [ ! -s &amp;quot;$GAMEPATH/$GAMEFILE.7z&amp;quot; ]; then rm -f &amp;quot;$GAMEPATH/$GAMEFILE.7z&amp;quot;; fi&lt;br /&gt;
	rm -f &amp;quot;$GAMEFILE.bin&amp;quot; &amp;quot;$GAMEFILE.toc.bak&amp;quot; &amp;quot;$GAMEFILE.cue&amp;quot;  &amp;quot;$GAMEFILE.log&amp;quot;&lt;br /&gt;
        cd&lt;br /&gt;
	rmdir --ignore-fail-on-non-empty &amp;quot;$TMPPATH&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveconf {&lt;br /&gt;
	echo &amp;quot;LASTGAME=\&amp;quot;$GAMENAME\&amp;quot;&lt;br /&gt;
LASTDISC=\&amp;quot;$DISCNO\&amp;quot;&lt;br /&gt;
LASTSYSTEM=\&amp;quot;$SYSTEM\&amp;quot;&lt;br /&gt;
LASTREGION=\&amp;quot;$REGION\&amp;quot;&lt;br /&gt;
LASTDRIVE=\&amp;quot;$DRIVEDEV\&amp;quot;&lt;br /&gt;
&amp;quot; &amp;gt; $CONFFILE&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Asking user for game name&lt;br /&gt;
&lt;br /&gt;
read -p &amp;quot;Enter game name [$LASTGAME]: &amp;quot; userinput&lt;br /&gt;
GAMENAME=&amp;quot;$LASTGAME&amp;quot;&lt;br /&gt;
if [ &amp;quot;$userinput&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
	GAMENAME=&amp;quot;$userinput&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Asking user for disc no.&lt;br /&gt;
&lt;br /&gt;
if [ $LASTDISC == &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	DISCNO=0&lt;br /&gt;
else&lt;br /&gt;
	DISCNO=$((LASTDISC+1))&lt;br /&gt;
fi&lt;br /&gt;
while true; do&lt;br /&gt;
	read -p &amp;quot;Enter disc number, 0 for single-disc game [$DISCNO]: &amp;quot; userinput&lt;br /&gt;
	case $userinput in&lt;br /&gt;
		0) DISCNO=&amp;quot;0&amp;quot;; break;;&lt;br /&gt;
		[123456789]) DISCNO=&amp;quot;$userinput&amp;quot;; break;;&lt;br /&gt;
		&amp;quot;&amp;quot;) break;;&lt;br /&gt;
		*) echo &amp;quot;Only numerical input allowed.&amp;quot;;;&lt;br /&gt;
	esac&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$DISCNO&amp;quot; == &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	FDISCNO=&amp;quot;&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
	FDISCNO=&amp;quot; (Disc $DISCNO)&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Asking user for System&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;System list:&lt;br /&gt;
0 - Sega Saturn&lt;br /&gt;
1 - Sega CD/Mega CD&lt;br /&gt;
2 - PlayStation&lt;br /&gt;
3 - PlayStation (with subchannels)&lt;br /&gt;
4 - PlayStation 2&lt;br /&gt;
5 - PC Engine Super CD/Turbo CD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while true; do&lt;br /&gt;
        read -p &amp;quot;Enter system ID, see list above [$LASTSYSTEM]: &amp;quot; userinput&lt;br /&gt;
        case $userinput in&lt;br /&gt;
                0) SYSTEM=&amp;quot;Sega Saturn&amp;quot;; break;;&lt;br /&gt;
                1) SYSTEM=&amp;quot;Mega CD&amp;quot;; break;;&lt;br /&gt;
                2) SYSTEM=&amp;quot;PlayStation&amp;quot;; break;;&lt;br /&gt;
		3) SYSTEM=&amp;quot;PlayStation (with subchannels) (DONT USE - SBI INSTEAD)&amp;quot;; break;;&lt;br /&gt;
                4) SYSTEM=&amp;quot;PlayStation 2&amp;quot;; break;;&lt;br /&gt;
                5) SYSTEM=&amp;quot;PC Engine CD&amp;quot;; break;;&lt;br /&gt;
		&amp;quot;&amp;quot;) SYSTEM=&amp;quot;$LASTSYSTEM&amp;quot;; break;;&lt;br /&gt;
                *) echo &amp;quot;Invalid system ID&amp;quot;;;&lt;br /&gt;
        esac&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
SYSTEMPATH=&amp;quot;$SYSTEM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Console specific settings&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$SYSTEM&amp;quot; == &amp;quot;PlayStation&amp;quot; ]; then MOREOPTS=&amp;quot;--read-raw --no-mode2-mixed&amp;quot;; fi&lt;br /&gt;
if [ &amp;quot;$SYSTEM&amp;quot; == &amp;quot;PlayStation (with subchannels) (DONT USE - SBI INSTEAD)&amp;quot; ]; then MOREOPTS=&amp;quot;--read-raw --no-mode2-mixed --read-subchan rw_raw&amp;quot;; SYSTEMPATH=&amp;quot;PlayStation&amp;quot;; fi&lt;br /&gt;
&lt;br /&gt;
# Asking user for game region&lt;br /&gt;
&lt;br /&gt;
REGION=&amp;quot;$LASTREGION&amp;quot;&lt;br /&gt;
read -p &amp;quot;Enter game region (i.e. Europe, USA, Japan, etc.) [$LASTREGION]: &amp;quot; userinput&lt;br /&gt;
if [ &amp;quot;$userinput&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
	REGION=&amp;quot;$userinput&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
FREGION=&amp;quot; ($REGION)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Asking user for disc drive device&lt;br /&gt;
&lt;br /&gt;
DRIVEDEV=$LASTDRIVE&lt;br /&gt;
read -p &amp;quot;Enter drive device [$DRIVEDEV]: &amp;quot; userinput&lt;br /&gt;
if [ &amp;quot;$userinput&amp;quot; != &amp;quot;&amp;quot; ]; then &lt;br /&gt;
        DRIVEDEV=&amp;quot;$userinput&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
FDRIVEDEV=&amp;quot;/dev/$DRIVEDEV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GAMEFILE=&amp;quot;$GAMENAME$FREGION$FDISCNO&amp;quot;&lt;br /&gt;
GAMEPATH=&amp;quot;$ROMPATH/$SYSTEMPATH&amp;quot;&lt;br /&gt;
TMPPATH=&amp;quot;$TMPPATH/backupgame-$$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# User confirmation&lt;br /&gt;
while true; do&lt;br /&gt;
	read -p &amp;quot;Image will be saved as $GAMEPATH/$GAMEFILE.7z, type y if that&amp;#039;s ok [y]: &amp;quot; userinput&lt;br /&gt;
	case $userinput in&lt;br /&gt;
		n) echo Too bad, bye then.; exit;;&lt;br /&gt;
		&amp;quot;&amp;quot;) break;;&lt;br /&gt;
		*) echo Answer yes or no;;&lt;br /&gt;
	esac&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
saveconf&lt;br /&gt;
mkdir -p &amp;quot;$GAMEPATH&amp;quot;&lt;br /&gt;
if [ -e &amp;quot;$GAMEPATH/$GAMEFILE.7z&amp;quot; ]; then&lt;br /&gt;
	echo File already exists!&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Ripping disc...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
touch &amp;quot;$GAMEPATH/$GAMEFILE.7z&amp;quot;&lt;br /&gt;
mkdir -p &amp;quot;$TMPPATH&amp;quot;&lt;br /&gt;
cd $TMPPATH&lt;br /&gt;
umount $FDRIVEDEV # can&amp;#039;t rip if it&amp;#039;s mounted&lt;br /&gt;
LC_ALL=C cdrdao read-cd $MOREOPTS -v 2 --device &amp;quot;$FDRIVEDEV&amp;quot; --driver generic-mmc-raw:0x20000 --datafile &amp;quot;$GAMEFILE.bin&amp;quot; &amp;quot;$GAMEFILE.toc&amp;quot; &amp;amp;&amp;gt; &amp;quot;$GAMEFILE.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;Ripping process was not completed, ripped files will not be deleted.&amp;quot;&lt;br /&gt;
	tail -n10 &amp;quot;$GAMEFILE.log&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
eject $DRIVEDEV&lt;br /&gt;
toc2cue &amp;quot;$GAMEFILE.toc&amp;quot; &amp;quot;$GAMEFILE.cue&amp;quot; &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
mv &amp;quot;$GAMEFILE.toc&amp;quot; &amp;quot;$GAMEFILE.toc.bak&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Ripping done, compressing file...&amp;quot;&lt;br /&gt;
rm -f &amp;quot;$GAMEPATH/$GAMEFILE.7z&amp;quot;&lt;br /&gt;
nice -n20 ionice -c3 7za a -mx=9 &amp;quot;$GAMEPATH/$GAMEFILE.7z&amp;quot; &amp;quot;$GAMEFILE.bin&amp;quot; &amp;quot;$GAMEFILE.toc.bak&amp;quot; &amp;quot;$GAMEFILE.cue&amp;quot; &amp;quot;$GAMEFILE.log&amp;quot; &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Archiving failed, ripped files will not be deleted.&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cleanup&lt;br /&gt;
&lt;br /&gt;
echo Done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ju</name></author>
	</entry>
</feed>