我是一个售后维护工程师,天天和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:
1
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命令去定位结果。后来同事帮忙修改了一下,使用起来更方便。该脚本效率应该还可以提升,大家可以思考一下。
浙公网安备 33010602011771号