From 05cb3b1b9ff7aca06179def4e6dc5645754974dc Mon Sep 17 00:00:00 2001 From: Lucas Vivohost Date: Thu, 23 Jul 2026 10:09:54 +0200 Subject: [PATCH] audiobook scripts --- vivohost/create_folder_structure.sh | 1 + vivohost/rename_audiobooks.sh | 30 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 vivohost/create_folder_structure.sh create mode 100644 vivohost/rename_audiobooks.sh diff --git a/vivohost/create_folder_structure.sh b/vivohost/create_folder_structure.sh new file mode 100644 index 0000000..13ed892 --- /dev/null +++ b/vivohost/create_folder_structure.sh @@ -0,0 +1 @@ +for file in *; do [ -f "$file" ] || continue; dir="${file%.*}"; mkdir -p "$dir"; mv -- "$file" "$dir/"; done diff --git a/vivohost/rename_audiobooks.sh b/vivohost/rename_audiobooks.sh new file mode 100644 index 0000000..01352d6 --- /dev/null +++ b/vivohost/rename_audiobooks.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +find . -type d | while read -r dir; do + name=$(basename "$dir") + + # Match Disc1, Disc01, disc02, CD1, cd01, etc. + if [[ $name =~ (^|[[:space:]._-])([Dd]isc|[Cc][Dd])0*([0-9]+)$ ]]; then + + cdnum="${BASH_REMATCH[3]}" + parent=$(dirname "$dir") + parentname=$(basename "$parent") + + find "$dir" -maxdepth 1 -type f | while read -r file; do + filename=$(basename "$file") + ext="${filename##*.}" + base="${filename%.*}" + + # If there's only one file in the folder, omit the original basename. + if [[ $(find "$dir" -maxdepth 1 -type f | wc -l) -eq 1 ]]; then + newname="CD${cdnum}.${ext}" + else + newname="CD${cdnum}.${base}.${ext}" + fi + echo "$file" "$parent/$newname" + cp "$file" "$parent/$newname" + done + else + echo "$name" + fi +done