# change directory without leaving empty directories behind function cdrmdir(){ src="$PWD" dest=${1%/}/ until [ "${dest#../}" = "$dest" ]; do cd .. dest="${dest#../}" rmdir "${src##*/}" >> /dev/null 2>&1 || break; src="${src%/*}" done cd "$dest" } # carry files while changing directory function mvcd(){ dest="${!#}" dest=${dest%/}/ if [ $# = 1 ]; then cd "$dest" else mv "${@:1:$(($# - 1))}" "$dest" && cd "$dest" fi } # carry files while changing directory, create/delete necessary/unnecessary directories function mkmvcd(){ dest="${!#}" dest=${dest%/}/ if [ $# = 1 ]; then mkdir -p "$dest" && cdrmdir "$dest" else mkdir -p "$dest" && mv "${@:1:$(($# - 1))}" "$dest" && cdrmdir "$dest" fi }