Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4178324
  • 博文数量: 291
  • 博客积分: 8003
  • 博客等级: 大校
  • 技术积分: 4275
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 18:28
文章分类

全部博文(291)

文章存档

2017年(1)

2013年(47)

2012年(115)

2011年(121)

2010年(7)

分类: Python/Ruby

2011-09-17 01:01:05

应征文比赛写了个递归查找文件内容的shell脚本
  1. #!/bin/bash
  2. ####################################################
  3. #作者:yifangyou
  4. #版本:v1
  5. #日期: 2011-09-17 00:51:00
  6. #系统环境:linux
  7. #编译环境:shell
  8. #执行: findstr.sh aPath aPattern
  9. #功能:实现遍历某个目录下的文件里的文件内容,打印出包含指定字符串的文件路径
  10. #参数1:文件路径,可以是相对路径,也可绝对路径
  11. #参数2:一个字符串,可以是模式匹配字符串类似于 abc* \d [0-9]
  12. #参数3..n:要查找的文件后缀,不支持模式匹配 一般就是 log conf 等等文本文件,缺省为 htm html txt log ini conf
  13. #运行:
  14. #[root@localhost ~]# ./findstr.sh . 386
  15. #./a/b/c/d/e/f/b.txt
  16. #./a/install.txt
  17. #./install.log
  18. #[root@localhost ~]# ./findstr.sh . 386 log jsp
  19. #./a/b/c/d/e/f/b.jsp
  20. #./install.log
  21. #[root@localhost ~]# ./findstr.sh . [0-9a-z]
  22. #./a/install.txt
  23. #./install.log
  24. ####################################################
  25. if [ -z "$1" ] || [ -z "$2" ] # 检查传递给脚本的参数.
  26. then
  27. echo "Usage: `basename $0` path pattern"
  28. exit 1
  29. fi
  30. suffixs=( htm html txt log ini conf )
  31. basepath=$1;
  32. str=$2;
  33. shift
  34. shift
  35. #若是参数中含有其他参数,则认为是查找指定后缀的文件
  36. suffixstr=${suffixs[@]}
  37. if [ $# -gt 0 ]
  38. then
  39. suffixstr=$@
  40. fi
  41. findstr() {
  42. local filename=$1;
  43. if [ -f $filename ] && [ -r $filename ]
  44. then
  45. for suffix in $suffixstr
  46. do
  47. # 判断后缀
  48. suffixpattern="*.$suffix"
  49. if [[ $filename == $suffixpattern ]]
  50. then
  51. # 判断是文件
  52. if [ "`egrep -c $str $filename`" -gt "0" ]
  53. then
  54. # 输出结果
  55. echo "$filename";
  56. fi
  57. break;
  58. fi
  59. done
  60. else
  61. # 判断是目录
  62. if [ -d $filename ]
  63. then
  64. for entry in `ls -A $filename`
  65. do
  66. # echo $filename/$entry;
  67. # 递归调用,但是不能超过ulimit -a|grep stack里设定的大小(默认为10240),极有可能产生段错误(这依赖于栈尺寸, 可以用ulimit -m来设置).
  68. findstr $filename/$entry;
  69. done
  70. fi
  71. fi
  72. }
  73. #调用函数查找字符
  74. findstr $basepath;
阅读(7132) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

vsyour2011-09-22 10:46:24

filename or filepath?