Skip to content

Instantly share code, notes, and snippets.

@universome
Created January 15, 2016 10:08
Show Gist options
  • Save universome/3871b285288d12f85fb1 to your computer and use it in GitHub Desktop.
Save universome/3871b285288d12f85fb1 to your computer and use it in GitHub Desktop.
Renames everything (filenames and file contents) recursively inside a folder
#!/bin/bash
forbidden_extensions=( "jpg" "jpeg" "png" "gif" "swf" "svg" )
# Usage: includes 'blabla' $arr
includes () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
rename() {
for entity in "$1"/*; do
dir="$(dirname "$entity")"
base="$(basename "$entity")"
new_name="$dir/${base/my-old-name/my-new-name}"
if [ ! "$entity" = "$new_name" ]; then
mv "$entity" "$new_name"
fi
if includes "${new_name##*.}" "${forbidden_extensions[@]}"; then
echo "FILE IS FORBIDDEN:" "${new_name}"
fi
if [[ -d "$new_name" ]]; then
rename "$new_name"
elif [[ -f "$new_name" ]]; then
if includes "${new_name##*.}" "${forbidden_extensions[@]}"; then
echo "FILE IS FORBIDDEN:" "${new_name}"
else
sed -i '' 's/my-old-name/my-new-name/g' "$new_name"
fi
fi
done
}
# rename everything inside ./my-dir
rename ./my-dir
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment