#!/bin/bash SAVEIFS=$IFS IFS=$(echo -en "\n\b") recursive=false while getopts ":r?" opt; do case $opt in r) recursive=true ;; *) echo $usage exit 1 esac done shift $((OPTIND-1)) function rename() { local base="$1" shift 1 for file in $*; do file=${file//[\\]/} filepath="$base/$file" ext="${file##*.}" if [ "$ext" == "$file" ]; then ext="" else ext=".$ext" fi if [ -d $filepath ]; then if $recursive && [ ! -L $filepath ]; then rename "$filepath" $(ls -b $filepath) fi continue fi filename="$(md5sum $filepath | awk '{print $1}')$ext" if [ $file != $filename ]; then mv -f "$filepath" "$base/$filename" fi done } if [ "$#" -eq 0 ]; then echo "At least one file must be given" exit 1 fi declare -a files=() for file in $@; do if [[ $file != /* ]]; then file="$(pwd)/$file" fi files+=("$file") done rename "/" "${files[@]}" IFS=$SAVEIFS