31 lines
933 B
Bash
31 lines
933 B
Bash
#!/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
|