Skip to content

Instantly share code, notes, and snippets.

@adam-zethraeus
Last active August 16, 2023 08:04
Show Gist options
  • Save adam-zethraeus/8e7515959decea86b28adb4e05986aac to your computer and use it in GitHub Desktop.
Save adam-zethraeus/8e7515959decea86b28adb4e05986aac to your computer and use it in GitHub Desktop.
sanitize file names, or sanitize recursively
#!/usr/bin/env bash
sanitize_node() {
shopt -s extglob
filename=$(basename "$1")
directory=$(dirname "$1")
if [ -f "$1" ]; then
extension=".${filename##*.}"
else
extension=""
fi
name="${filename%.*}"
cleanname="${name//+([^[:alnum:]_-\.])/_}"
if (test "$filename" != "${cleanname}${extension}"); then
finalname="${cleanname}${extension}"
if [ -e "${cleanname}${extension}" ]; then
num=1
while [ -e "${cleanname}-${num}${extension}" ]; do
((num += 1))
done
finalname="${cleanname}-${num}${extension}"
fi
mv "$1" "$directory/$finalname"
fi
}
usage() {
echo "sanitize file names"
echo "usage:"
echo "- sanitize [file]"
echo "- sanitize -R [directory]"
}
[[ "$1" == "-R" && -d "$2" ]] || [[ -f "$1" && "$2" == "" ]] || { usage && exit 1; }
if [ "$1" == -R ]; then
export -f sanitize_node
find "$2" -depth -exec bash -c 'sanitize_node "{}"' \;
else
sanitize_node "$1"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment