diff --git a/.local/bin/fixnames b/.local/bin/fixnames new file mode 100644 index 00000000..13ac6ed9 --- /dev/null +++ b/.local/bin/fixnames @@ -0,0 +1,18 @@ +#!/bin/dash + +[ "$(id -u)" = "0" ] && echo "This script should not be run as root" >&2 && exit 1 + +find . -depth \( -path '*/.*' -o -path '*/.*/*' \) -prune -o \( -type f -o -type d \) -print0 | xargs -0 -P 0 -I {} dash -c ' + +base="${1##*/}" +path="${1%/*}" + +pattern="s/[^a-zA-Z0-9 ._-]//g; s/[ .-]/_/g; s/_+/_/g; s/^_+//; s/_+$//; s/[A-Z]/\L&/g" + +[ -f "$1" ] && pattern="$pattern; s/_([^_]+)$/.\\1/" + +new_name="$(echo "$base" | sed -E "$pattern")" + +[ "$base" != "$new_name" ] && [ -e "$path/$new_name" ] && new_name="${$}_${new_name}" +[ "$base" != "$new_name" ] && mv "$1" "$path/$new_name" +' _ {}