smartMv(){ if [ -z "$1" ] then echo"No argument supplied" exit fi
# Variable definitions start file=$1# file path _root=$2# root directory sortByKind=$3# if needed sort by kind in Folders fileName=$(basename -- "$file") pwd=$(pwd) # Variable definitions ended
# function defined mv_no_override() { localdir file ext base num if [ -d "$2" ]; then dir=$2 file=$(basename"$1") else dir=$(dirname"$2") file=$(basename"$2") fi ext="$(sed -r 's/.+(\..+)|.*/\1/' <<<"$file")" base="$(sed -r 's/(.+)\..+|(.*)/\1\2/' <<<"$file")" while [ -e "$dir/$base$num$ext" ]; do (( num++ )) done mv"$1""$dir/$base$num$ext" echo"move file $pwd/$1 ->""$dir/$base$num$ext""success" }
moveTO(){ if [ ! -d "$2" ];then# if folder exist mkdir -p "$2" fi mv_no_override "$1""$2/${3}"
} mdlsFormat(){ # format result for `mdls` echo `mdls -name $1$2 | cut -d "=" -f 2 | sed 's/\"//g' | sed -e 's/^[[:space:]]*//'` } mdlsFormatUTI(){ echo `mdls -name $1$2 | cut -d "=" -f 2 | sed 's/,//' | sed 's/)//' | sed 's/(//'` } # function defined ended
# Classification according to utiTree start utiTree=(`mdlsFormatUTI kMDItemContentTypeTree $file`) for uti in$utiTree do _uti=`echo$uti | sed 's/\"//g'`
regexp="(^[0-9]{4}\-[0-9]{2}\-)"# check file name if [[ $fileName =~ $regexp ]] then echo"file name has date, don't rename" else creationDatesFormat=$(date -j -f " %Y-%m-%d %H:%M:%S %z""$kMDItemContentCreationDate" +%Y-%m-) fileName=${creationDatesFormat}$fileName# rename file by adding creationTime fi # rename end
# mv to folder start if [[ $sortByKind == 1 ]] then kind=$(mdlsFormat kMDItemKind "$file") destination=${_basePath}${kind} moveTO "$file""${destination}""${fileName}"# sort to finder by kind else moveTO "$file""$_basePath""${fileName}"# move to basePath fi