Skip to content

Instantly share code, notes, and snippets.

@mef
Forked from dylan-evans/audacity_rescue.sh
Last active December 11, 2021 23:14
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save mef/2c90295920dc66f669a6 to your computer and use it in GitHub Desktop.
Save mef/2c90295920dc66f669a6 to your computer and use it in GitHub Desktop.
#!/bin/bash
#Recover from an Audacity crash by reassembling the saved data files
if [ $# != 2 ]; then
echo "ERROR: Not enough arguments"
echo "$0 [SOURCE PATH] [DESTINATION]"
exit 1
fi
DATA="$1/"
OUT=$2
if [ -e $OUT ]; then
# Hope the path exists
echo "ERROR: Output file exists ($OUT)"
exit 1
fi
COUNT=1
find $DATA -name "*.au" -print0 | while read -d $'\0' FILE ; do
#The offsets are probably all going to be the same, but best check it
OFFSET=$(echo $(od -i -j4 -N4 -An < $FILE) ) # Use echo for easy trim
if [ $COUNT -eq 1 ]; then
# Write the header
dd ibs=$OFFSET count=1 if=$FILE of=$OUT
fi
echo "Adding $FILE (offset=$OFFSET)"
dd ibs=$OFFSET skip=1 conv=notrunc oflag=append if=$FILE of=$OUT
let COUNT+=1
done
echo "Done"
@masongcm
Copy link

masongcm commented Mar 8, 2021

Hi all! Thanks for your work here. Do you know if this would work on a project with multiple tracks?

@jonata
Copy link

jonata commented May 13, 2021

Suggestion: in cases where the files are not named in sequence according to time of creation, you can replace this line:

find $DATA -name "*.au" -print0 | while read -d $'\0' FILE ; do

with this:

find $DATA -name "*.au" -printf "%T@ %Tc %p\n" | sort -n | awk '{print $NF}' | while read -d $'\n' FILE ; do

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment