#!/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