【BASH工具】日常使用频繁的目录软连接的管理工具,以达到快速切换的目的

注:

将下面的内容保存成一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'

猜你喜欢

转载自blog.csdn.net/liudglink/article/details/81263094
今日推荐