diff --git a/fix_gopro_filenames.sh b/fix_gopro_filenames.sh new file mode 100755 index 0000000..6c7c28c --- /dev/null +++ b/fix_gopro_filenames.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +error_log=.fix_gopro_filenames_error.log + +if ! touch $error_log; then + printf '%b\n' "\e[1;31mERROR\e[1;37m:\e[0m Unable to write to current directory." >&2 + exit 1 +fi +printf '%s\n' 'Searching for GoPro video files...' +FILES=$(ls -1 | grep -E '^GX[0-9]{6}.MP4$') +if [ -z "$FILES" ]; then + printf '%b\n' "\e[1;31mERROR\e[1;37m:\e[0m No GoPro files with default names found in current directory." >&2 + exit 1 +fi +printf '%b\n' "\nFound:\n$FILES\n" +printf '%s' "Do you want to continue renaming these files? (y/N) " +read -n 1 response +if [ "$response" != "y" ] && [ "$response" != "Y" ]; then + printf '\n%s\n' "Aborted." + exit 1 +fi +printf '\n%s\n' "Continuing..." + +printf '%s\n' $FILES | while read -r i; do + sq=$(printf '%s\n' $i | awk '{print substr($0, 3, 2)}') + vn=$(printf '%s\n' $i | awk '{print substr($0, 5, 4)}') + oname="GX${sq}${vn}.MP4" + nname="GX${vn}_${sq}.MP4" + + printf '%b' "Renaming \e[1;33m${oname}\e[0m to \e[1;32m${nname}\e[0m... " + if mv $oname $nname 2>>$error_log; then + printf '%b\n' "\e[1mDONE\e[0m" + else + printf '%b\n' "\e[1;31mFAIL\e[0m" + fi +done + +if [ -s $error_log ]; then + printf '%b\n' " !!!\e[1;31m ERRORS ENCOUNTERED: \e[0m!!!\n------------" >&2 + printf '%b\n' "$(cat $error_log)\n------------" >&2 + rm "$error_log" + exit 3 +else + printf '%b\n' "\e[1;34m Complete!\e[0m" + rm "$error_log" + exit 0 +fi +