免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2106 | 回复: 4
打印 上一主题 下一主题

[文件目录] 分享一个自己写的cd ..的小脚本,欢迎批评指正 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-09 13:09 |只看该作者 |倒序浏览
工作中,经常cd ..;cd ..;cd ...  很懒很抓狂
边学shell边写了一个小脚本   upFun.tar (10 KB, 下载次数: 2)
配合alias up='. upFun', 可以快速回到上级目录

世界上肯定有更好的类似脚本/命令,欢迎留言告诉我

演示一下脚本工作情况
第一种模式,简单的向上3层目录:
/work/foo/bar/workspace/Felix $ up 3
/work/foo $
第二种模式,回到先遇到的前缀为wor的目录:
/work/foo/bar/workspace/Felix $ up wor
/work/foo/bar/workspace $

源码如下,第一次发贴,如有错误请包涵指正。
  1. #!/bin/bash

  2. ##
  3. # Print usage page
  4. ##
  5. function usagePage() {
  6. echo "
  7. ------------------------------------------------------------------
  8. Felix\`s up scrpit
  9. Free you from cd ..;cd ..;cd ...; FatFingerError!!
  10. ------------------------------------------------------------------
  11. Support two mode command:
  12. 1) up [N]       :   go up N level
  13. 2) up [PREFIX]  :   go to the first parent matchs the prefix

  14. TODO: PREFIX mode dosen\`t support whitespace, maybe some other
  15.        REGULAR char
  16. ------------------------------------------------------------------
  17. "
  18. }

  19. ##
  20. # Repeatly go up by $1 times.
  21. #
  22. # Recursive call
  23. # Stop at /
  24. # Stop at $1 == 0
  25. #
  26. ##
  27. function upByIntMode {
  28.     if [ $1 -eq 0 ]; then
  29.         return
  30.     elif [ ! "/" == "$PWD" ] || [ $1 -eq 0 ]; then
  31.         cd ..
  32.         # recursion
  33.         upByIntMode `expr $1 - 1`
  34.     fi
  35. }

  36. ##
  37. # Go to parent dir which matches the prefix $1
  38. #
  39. # Recursive call
  40. # Stop at $PREF not contained
  41. # Stop at basename match $PREF
  42. #
  43. ##
  44. function upByPrefixMode {
  45.     # test if $1 contain $PREF
  46.     if [[ $1 == *$PREF* ]]; then
  47.         BASENAME=`basename $1`
  48.         # test if $1 is the target dir
  49.         if [[ $BASENAME == $PREF* ]]; then
  50.             cd $1
  51.         else
  52.             # recursion
  53.             upByPrefixMode `dirname $1`
  54.         fi
  55.     else
  56.         usagePage
  57.     fi
  58. }

  59. ##
  60. # main
  61. ##
  62. if [ $# -ne 1 ]; then
  63.     # MUST supply 1 param
  64.     usagePage;
  65. else
  66.     # test if $1 is positive int, matches int mode
  67.     if [ $1 -gt 0 ] 2>/dev/null; then
  68.         upByIntMode $1
  69.     else
  70.         # matches prefix mode
  71.         PREF=$1
  72.         upByPrefixMode $PWD
  73.     fi
  74. fi
复制代码

论坛徽章:
3
巳蛇
日期:2014-04-24 17:25:352015年辞旧岁徽章
日期:2015-03-03 16:54:15NBA常规赛纪念章
日期:2015-05-04 22:32:03
2 [报告]
发表于 2014-05-09 13:38 |只看该作者
占位先,mark再看

论坛徽章:
3
巳蛇
日期:2014-04-24 17:25:352015年辞旧岁徽章
日期:2015-03-03 16:54:15NBA常规赛纪念章
日期:2015-05-04 22:32:03
3 [报告]
发表于 2014-05-09 13:53 |只看该作者
写的挺好的
不建议用递归

论坛徽章:
0
4 [报告]
发表于 2014-05-09 13:56 |只看该作者
一、cd中可以cd a/s/d/f,而不用cd a;cd s;cd d;cd f。
二、cd -等效于cd $OLDPWD。

论坛徽章:
0
5 [报告]
发表于 2014-05-09 15:06 |只看该作者
回复 4# 用户名注册后不能更改

第二点我知道, 但是不太符合这个脚本的目的。工作项目目录很深,是为了退出去几层,而不是为了回到上一个目录。

第一点没看明白,再解释两句?
你的意思是 cd ../../../../.. ?


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP