#!/bin/bash # todo : add a dry-run sanitize() { shopt -s extglob filename=$(basename "$1") directory=$(dirname "$1") filename_clean="${filename//+([^[:alnum:]_-\\.])/_}" if [[ $filename != "$filename_clean" ]]; then mv -v --backup=numbered "$1" "$directory/$filename_clean" fi } export -f sanitize find "$1" -depth -exec bash -c 'sanitize "$0"' {} \;