#!/usr/bin/env bash set -euo pipefail # for i in *placehoder*; do mv "$i" "${i//placeholder/replacement}" done replacements= declare -A replacements unset replacements[0] replacements[' ']='_'; replacements[':']='_'; replacements["'"]='_'; replacements['(']='_'; replacements[')']='_'; replacements['[']='_'; replacements[']']='_'; while [[ $# > 0 ]]; do replacements["$1"]="$2"; shift 2; done for toReplace in "${!replacements[@]}"; do echo "$toReplace" replacement=${replacements[$toReplace]} echo "$replacement" for i in *; do echo "$i" if [[ ! -e "$i" || "$i" == "${i//$toReplace/$replacement}" ]]; then continue; # weird behaviour with single space makes this necessary fi echo "mv $i -> ${i//$toReplace/$replacement}"; mv "$i" "${i//$toReplace/$replacement}"; done done