LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1428|回复: 15

shell中有链表吗?

[复制链接]
发表于 2007-7-1 19:04:14 | 显示全部楼层 |阅读模式
想在一个目录中搜索一个东西,但不知道进入一个子目录后再出来继续搜索的时候不再搜索已经进过的目录,不知道链表能不能实现?或者是有一个好的方法来实现,谁能给我说个思路,谢谢
发表于 2007-7-1 19:52:18 | 显示全部楼层
首先想说的是:shell中没有链表这种数据结构给你用。shell不是general-purpose语言,本身连浮点运算都不支持。
再者,对于你所说的问题,并不是很明白:难道 find(1) 直接不能做到么?如果硬是要遍历目录树,把需要的操作装在一个函数里并且递归即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-1 20:18:04 | 显示全部楼层
确实是要遍历目录树,我也用了递归,但是文件夹太多,想一层一层回来就不太容易了,而且不能解决是否进过这个文件夹的问题
再解释下我的问题:
假如我要在一个目录像/home下,找到一个包含一个string的文件,那么就需要进入每次一个文件夹,遇到文件夹进入,遇到文件就检索,就这个文件夹的问题没有解决了。
回复 支持 反对

使用道具 举报

发表于 2007-7-1 21:19:02 | 显示全部楼层
如果用了递归,是不会出现“是否进过这个文件夹”这种问题的——
  1. sample() {
  2.         for i in *; do
  3.                 if [ \( -d "$i" \) -a \( -x "$i" \) ]; then
  4.                         ( cd "$i" && sample )
  5.                 else
  6.                         [i]processing normal file "$i"[/i]
  7.                 fi
  8.         done
  9. }
复制代码
每层递归会保存自己原有的信息(栈之类的我就不说了,专业术语不懂...-_-),因此对于同一个层次的目录访问是顺序下来的,不会出现重复进入相同的目录的情况。递归不都这样么?
回复 支持 反对

使用道具 举报

发表于 2007-7-1 21:45:48 | 显示全部楼层
没有必要用 ()
如果目录过多
那么相应的sub-shell也很多
浪费资源
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-1 21:53:15 | 显示全部楼层
这样正好,呵呵,谢谢,没想到递归可以这样用,自己还是不行,想了半天都没想明白,以后要加把劲了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-1 21:59:57 | 显示全部楼层
Post by huan
没有必要用 ()
如果目录过多
那么相应的sub-shell也很多
浪费资源
我刚才试了试,不用括号不行,不然就出不来了,能解释一下这是什么原因吗
回复 支持 反对

使用道具 举报

发表于 2007-7-1 23:11:38 | 显示全部楼层

  1. test.sh

  2. #!/bin/bash

  3. grep -i "$1" "$2" &>/dev/null  &&  echo $2

复制代码


find 目录  -type f  -exec  test.sh 字符串 '{}' \;   2>/dev/null

这好象也能搜索到含有某个字符串的文件
回复 支持 反对

使用道具 举报

发表于 2007-7-1 23:14:07 | 显示全部楼层
说说具体想干嘛吧. 很少有用find不能解决的.

如果仅仅是要找含某字符的文件的话, 只要grep -R xxx 目录 就可以了.
回复 支持 反对

使用道具 举报

发表于 2007-7-1 23:17:14 | 显示全部楼层
Post by huan
没有必要用 ()
如果目录过多
那么相应的sub-shell也很多
浪费资源

递归本来不就是以性能换取代码的简洁么?
不过我好奇的是你有什么更好的办法呢?当然,除了 find(1) 以外。
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表