我是一个售后维护工程师,天天和UNIX打交道,最讨厌进入很深的目录,因为要敲很多次键盘,而且还经常敲错。

我先演示一下该脚本用处: 
第一步把脚本保存好后(脚本内容在下文),在.profile文件中加一段话,比如我这里的 
. /app/bjolcom/bss/shell/private_function 
作用是每次你登陆UNIX,系统就会加载该文件中的函数,这样的话cdfind可以像cd,ls等系统命令一样随时使用。 

现在假设我们要进入/app/bjolcom/bss/brs/src/Bearer-V02-00-032这个目录,一般情况下我们要敲很多次键盘而且还常常忘记Bearer-V02-00-032在哪个目录下。现在我们输入cdfind bear 请看结果: 
$ cdfind bear 
1         /app/bjolcom/bss/brs/src/Bearer-V02-00-032 
2         /app/bjolcom/bss/brs/src/Bearer 
Which one do you want to choose: 


系统提示你想进入哪个目录,我们选择1,结果: 
$ cdfind bear 
1         /app/bjolcom/bss/brs/src/Bearer-V02-00-032 
2         /app/bjolcom/bss/brs/src/Bearer 
Which one do you want to choose: 

We are in /app/bjolcom/bss/brs/src/Bearer-V02-00-032 
系统提示我们已经进入到我们想进入的目录了。 

当然,你输入cdfind BEAR也一样,入参大小写不敏感,随便你输。 

 

脚本如下: 
cdfind () 

#the script location 
_location="/home/olcom/script" 
_number=1 
if [ $# -ne 1 ];then 
echo "You must input only one parameter!" 
else 
   _inivar=$1 
   tran 
   _content=`find ~ -type d -name "*""$_var5""*" |tr '\n' '|' ` 
   _varNum=`echo $_content|tr -cd \||wc -c` 
    
    
   if [ "$_varNum" -gt "1" ];then 
     for _loop in `find ~ -name "*""$_var5""*" -type d` 
     do 
     echo "$_number""         ""$_loop" 
     _number=`expr "$_number" + 1` 
     done 
      
     echo "Which one do you want to choose:" 
     read _ANS 
     _target=`echo "$_content"|cut -d '|' -f"$_ANS"` 
     #_target=`sed -n "$_ANS"p "$_location"/temp.txt` 
     cd "$_target" 
     echo "We are in $PWD" 
    
   elif [ "$_varNum" -eq "1" ];then 
     _target=`echo "$_content"|cut -d '|' -f1` 
      
     cd "$_target" 
     echo "We are in $PWD" 
   
   else 
     echo "No this directory!" 
   fi 
fi 

#1;cdfind:/J}5wSC 
tran () 

#var1T-J<2NJ} 
_var1=$_inivar 
#var2H+2?W*3IP!P4:s2NJ} 
_var2=`echo "$_var1" | tr "[A-Z]" "[a-z]"` 
_LENGTH=`echo $_var1 | awk '{print length($0)}'` 
_number2=1 
_var5="" 
while [ "$_number2" -lt `expr "$_LENGTH" + 1` ] 
do 
#var304N;=XH!2"W*;/3I4sP42NJ} 
_var3=`echo "$_var2" | cut -c"$_number2" | tr "[a-z]" "[A-Z]"` 
#var404N;=XH!P!P42NJ} 
_var4=`echo "$_var2" | cut -c"$_number2"` 
#var5F4=S 
_var5="$_var5""[""$_var3""$_var4""]" 
_number2=`expr "$_number2" + 1` 
done 

该脚本释义:cd命令大家都知道是什么意思,就是进入某个目录。find我想也不陌生,就是查找出符合你查询条件的结果。结合起来就是:快速进入被我查询出来的符合查询条件的目录。 
脚本一共有两个函数,tran函数主要是为cdfind中的find命令提供一个正则表达式,例如可以把opl转换成[Oo][Pp][Ll] 。 



后记:起初写这个脚本的时候,过程是先find出结果输入到一个文本中,然后用sed命令去定位结果。后来同事帮忙修改了一下,使用起来更方便。该脚本效率应该还可以提升,大家可以思考一下。