64 lines
1.3 KiB
Bash
64 lines
1.3 KiB
Bash
|
# 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
|
||
|
}
|
||
|
|