dotfiles/.bash_rc.d/00.dir_utils.sh

64 lines
1.3 KiB
Bash
Executable File

# return an arbitrary directory path suffix
# usage: dir_suffix num_of_path_elements [optional prefix]
function dir_suffix() {
num=${1:-1};
prefix=${2:-".../"}
cd=$(pwd)
arr=( $(echo $cd | tr '/' ' ') );
ret="";
len=${#arr[*]}
if [ $len -le $num ]; then
echo $cd
else
for i in $(seq $len -1 $(expr $len - $num)); do
ret="${arr[$i]}/$ret";
done;
ret_len=${#ret}
echo "${prefix}${ret:0:$(expr $ret_len - 2)}";
fi
}
# return an abbreviated version of a path
# usage: abbr_path num_of_path_to_show [optional path]
# abbr 2 /foo/bar/baz # /f/bar/baz
function abbr_path() {
path=${2:-$(pwd)}
num=${1:-2}
ret=""
fc=${path:0:1}
case $fc in
"~")
ret=$fc
num=$(expr $num - 1)
path=${path:1}
;;
"/")
;;
*)
ret=$(expr $path : '^\([^\/]*\)\/')
path=${path:${#ret}}
ret=${ret:0:1}
num=$(expr $num - 1)
;;
esac
arr=( $(echo $path | tr '[A-Z]' '[a-z]' | tr '/' ' ') )
len=${#arr[*]}
if [ $len -le $num ]; then
echo ${2:-$(pwd)}
else
if [ $num -gt 0 ]; then
for i in $(seq 0 1 $(expr $len - $num - 1)); do
el=${arr[$i]}
el=${el:0:1}
ret="$ret/$el"
done
fi
for i in $(seq $(expr $len - $num) 1 $(expr $len - 1)); do
el=${arr[$i]}
ret="$ret/$el"
done
echo "$ret/";
fi
}