设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
shell中有链表吗?
1
2
/ 2 页
下一页
返回列表
查看:
1428
|
回复:
15
shell中有链表吗?
[复制链接]
budgerigar
budgerigar
当前离线
积分
109
IP卡
狗仔卡
发表于 2007-7-1 19:04:14
|
显示全部楼层
|
阅读模式
想在一个目录中搜索一个东西,但不知道进入一个子目录后再出来继续搜索的时候不再搜索已经进过的目录,不知道链表能不能实现?或者是有一个好的方法来实现,谁能给我说个思路,谢谢
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
Jockey
Jockey
当前离线
积分
2694
IP卡
狗仔卡
发表于 2007-7-1 19:52:18
|
显示全部楼层
首先想说的是:shell中没有链表这种数据结构给你用。shell不是general-purpose语言,本身连浮点运算都不支持。
再者,对于你所说的问题,并不是很明白:难道 find(1) 直接不能做到么?如果硬是要遍历目录树,把需要的操作装在一个函数里并且递归即可。
回复
支持
反对
使用道具
举报
显身卡
budgerigar
budgerigar
当前离线
积分
109
IP卡
狗仔卡
楼主
|
发表于 2007-7-1 20:18:04
|
显示全部楼层
确实是要遍历目录树,我也用了递归,但是文件夹太多,想一层一层回来就不太容易了,而且不能解决是否进过这个文件夹的问题
再解释下我的问题:
假如我要在一个目录像/home下,找到一个包含一个string的文件,那么就需要进入每次一个文件夹,遇到文件夹进入,遇到文件就检索,就这个文件夹的问题没有解决了。
回复
支持
反对
使用道具
举报
显身卡
Jockey
Jockey
当前离线
积分
2694
IP卡
狗仔卡
发表于 2007-7-1 21:19:02
|
显示全部楼层
如果用了递归,是不会出现“是否进过这个文件夹”这种问题的——
sample() {
for i in *; do
if [ \( -d "$i" \) -a \( -x "$i" \) ]; then
( cd "$i" && sample )
else
[i]processing normal file "$i"[/i]
fi
done
}
复制代码
每层递归会保存自己原有的信息(栈之类的我就不说了,专业术语不懂...-_-),因此对于同一个层次的目录访问是顺序下来的,不会出现重复进入相同的目录的情况。递归不都这样么?
回复
支持
反对
使用道具
举报
显身卡
huan
huan
当前离线
积分
462
IP卡
狗仔卡
发表于 2007-7-1 21:45:48
|
显示全部楼层
没有必要用 ()
如果目录过多
那么相应的sub-shell也很多
浪费资源
回复
支持
反对
使用道具
举报
显身卡
budgerigar
budgerigar
当前离线
积分
109
IP卡
狗仔卡
楼主
|
发表于 2007-7-1 21:53:15
|
显示全部楼层
这样正好,呵呵,谢谢,没想到递归可以这样用,自己还是不行,想了半天都没想明白,以后要加把劲了
回复
支持
反对
使用道具
举报
显身卡
budgerigar
budgerigar
当前离线
积分
109
IP卡
狗仔卡
楼主
|
发表于 2007-7-1 21:59:57
|
显示全部楼层
Post by
huan
没有必要用 ()
如果目录过多
那么相应的sub-shell也很多
浪费资源
我刚才试了试,不用括号不行,不然就出不来了,能解释一下这是什么原因吗
回复
支持
反对
使用道具
举报
显身卡
springwind426
springwind426
当前离线
积分
1779
IP卡
狗仔卡
发表于 2007-7-1 23:11:38
|
显示全部楼层
test.sh
#!/bin/bash
grep -i "$1" "$2" &>/dev/null && echo $2
复制代码
find 目录 -type f -exec test.sh 字符串 '{}' \; 2>/dev/null
这好象也能搜索到含有某个字符串的文件
回复
支持
反对
使用道具
举报
显身卡
lastart
lastart
当前离线
积分
913
IP卡
狗仔卡
发表于 2007-7-1 23:14:07
|
显示全部楼层
说说具体想干嘛吧. 很少有用find不能解决的.
如果仅仅是要找含某字符的文件的话, 只要grep -R xxx 目录 就可以了.
回复
支持
反对
使用道具
举报
显身卡
Jockey
Jockey
当前离线
积分
2694
IP卡
狗仔卡
发表于 2007-7-1 23:17:14
|
显示全部楼层
Post by
huan
没有必要用 ()
如果目录过多
那么相应的sub-shell也很多
浪费资源
递归本来不就是以性能换取代码的简洁么?
不过我好奇的是你有什么更好的办法呢?当然,除了 find(1) 以外。
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
Linux 基础讨论区(新手速成)
开源软件专题讨论
Archlinux讨论区
LFS(LinuxfromScratch)
服务器架设、应用、维护
Java 程序设计开发讨论
Gentoo Linux
BSD 讨论专题
Linux 程序设计专题讨论
Ubuntu Linux 专题讨论
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表