注:
将下面的内容保存成一shell脚本文件,然后使用 source 文件名 来加载,之后直接使用cdt这个命令即可. 设置了别名cdx是快速创建不存在的路径的的快捷键。
具体内容如下:
#!/bin/bash
#=================================================================
# CPSTR: Copyright (c) 2018 By Abodu, All Rights Reserved.
# FNAME: util_cdt
# AUTHR: abodu,[email protected]
# CREAT: 2018-05-25 07:05:40
# ENCOD: UTF-8 Without BOM
# VERNO: 1.0.3
# LUPTS: 2018-07-28 17:09:38
#=================================================================
cdt()
{
#检测环境变量DTAGS_HOME是否存在
if [ "x" = "x$DTAGS_HOME" ]; then
export DTAGS_HOME=~/.dtags
export DTAGS_CACHE=${DTAGS_HOME}/.cdtags
[ -d ${DTAGS_HOME} ] || mkdir -p ${DTAGS_HOME}
#[ -e ${DTAGS_CACHE} ] || touch ${DTAGS_CACHE} #创建缓存文件
fi
# 若是没有参数,则默认为是--list
if [ $# -eq 0 ] || [ "x$1" == "x-l" -o "x$1" == "x--list" ]; then
ls -l ${DTAGS_HOME} | grep '^l' | awk '{printf("%s -> %s\n",$(NF-2),$NF);}' | column -t
return
fi
#若是第一个参数是-h/--help,则输出使用方法并退出
if [ "x$1" == "x-h" -o "x$1" == "x--help" ]; then
echo
echo "USAGE: ${FUNCNAME} OPTIONS"
echo
echo "日常使用频繁的目录软连接的管理工具,以达到快速切换的目的"
echo
echo "Options:"
echo " <TagID>, 直接切换到TagID所链接到的指定目录"
echo " -a,--add [TagID], 为已经存在的指定目录添加TagID"
echo " -c,--create <newDirName>, 创建不存在的新目录"
echo " -r,--remove <TagID>, 删除指定的已存在的TagID"
echo " -l,--list , 列出当前所有已存在的TagID"
echo " -h,--help , 打印当前帮助信息"
echo
return
fi
#第一个参数不以 - 开头说明是TagID
if [ "x${1:0:1}" != "x-" ]; then
local dcd=$( ls -l ${DTAGS_HOME} | grep '^l' | grep $1 | awk '{print $NF}' 2>/dev/null | head -1)
[ -d $dcd ] && cd $dcd
elif [ "x$1" == "x-c" -o "x$1" == "x--create" ]; then
[ -d $2 ] || mkdir -p $2 ; cd $2
# -a/--add,若是不指定newTagID,则使用当前目录的名字
elif [ "x$1" == "x-a" -o "x$1" == "x--add" ]; then
local newTagID=$2
[ "x$newTagID" == "x" ] && newTagID=$(basename $PWD)
ln -s $PWD ${DTAGS_HOME}/${newTagID}
# -r/-d/--remove/--delete
else
(
cd ${DTAGS_HOME}
if [ "x${2}" == "xall" ];then
rm -f $(ls -l ${DTAGS_HOME} | grep '^l' | awk '{print $(NF-2)}')
return
fi
local k=
for k in $(ls -l ${DTAGS_HOME} | grep '^l' | awk '{print $(NF-2)}' | grep "${2}")
do
echo -n "Will remove tag '${k}'? "
read -r resp
[ "${resp/Y/y}" == "y" ] && rm -f $k
done
)
fi
}
alias cdx='cdt -c'