设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
写了一个显示目录树的脚本,可输出不对 ...
1
2
3
4
5
6
/ 6 页
下一页
返回列表
楼主:
LYOO
写了一个显示目录树的脚本,可输出不对
[复制链接]
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-4-26 21:38:19
|
显示全部楼层
呵~~,我也正琢磨呢!...
不知道find . -type d 这个命令对你是否有帮助?
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-4-26 22:44:24
|
显示全部楼层
LY00兄,有现成的脚本在[脚本欣赏区]
就是用我的思路:find . -type d
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-4-26 23:38:52
|
显示全部楼层
好简捷,不过我没学sed,看得还不大明白,这个脚本是乎有点问题,照原样拷贝的脚本,有语法错误无法执行,我改了一下,但实现的效果不甚理想,javalee检查一下吧。
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-4-26 23:52:18
|
显示全部楼层
嗯~~,我认为那个sed就是把find的输出编辑编辑美化美化而已~并无特别之处.
其实shell编程,更多的是倚赖linux和shell内建的命令,尤其是linux的命令,是取之不尽的资源,解决问题,应该由简避繁,简单实用方便快捷是shell的特色嘛~~(个人观点)
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-4-26 23:54:20
|
显示全部楼层
javalee所言极是,所谓KISS(Keep It Simple & Short)原则,不过要想KISS就得多学点东西,呵呵,等我看到sed、awk应该就能更好的写这个工具了。
附一个老外写的目录树显示工具(好象RH下的那个tree小命令就是它了),程序、输出都很漂亮,不过是C写的。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
注册
x
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-4-27 01:38:37
|
显示全部楼层
刚刚翻了翻书,发现Linux7.X版本中有个tree的命令,很好使用的,但是不知道为什么8.0没有~~?
回复
支持
反对
使用道具
举报
显身卡
carlos
carlos
当前离线
积分
7719
IP卡
狗仔卡
发表于 2003-4-27 13:22:47
|
显示全部楼层
8.0的光盘里也有呀
tree-1.2-20.i386.rpm 03-Sep-2002 23:42 15k
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
楼主
|
发表于 2003-4-27 20:02:50
|
显示全部楼层
终于搞定了,自己动手果然有不少体会。
#!/bin/bash
redir ()
{
#tab是真正的步长计算器
tab=$tab$singletab
line=${tab%"$singletab"}"|-------"
#local比较关键,它规定了count是当前的参数列表值
local count=$#
for file in "$@"; do
thisfile=${thisfile:-$PWD}/$file
#判断当前文件是否为目录,如果是就开始递归
if [ -d "$thisfile" ]; then
#如果当前目录是分枝列表的最底层,则需进行特殊处理。
if [ $count -eq 1 ]; then
echo -e $line$file/
#将前一个|符号去掉,看看目录树就知道为什么了。
tab=${tab%"$singletab"}"\t"
redir $(ls $thisfile)
else
echo -e $line$file/
redir $(ls $thisfile)
fi
else
echo -e $line$file
fi
thisfile=${thisfile%/*}
let count=count-1
done
#这一步比较有意思,因为从递归出来的tab结尾可能是TAB也可能是$singletab,所以分成两步来去掉。
tab=${tab%"\t"}
tab=${tab%"|"}
line=${tab%"$singletab"}"|-------"
}
singletab="|\t"
userinput="$@"
if ls $userinput; then
for file in ${userinput:-.}; do
echo $file
echo '|'
if [ -d "$file" ]; then
cd $file
redir $(ls)
cd ..
fi
done
else
echo "$userinput is wrong"
fi
复制代码
看看效果,还不错吧:p
/home/lyoo/GNUstep
|
|-------Defaults/
| |-------WindowMaker
| |-------WMGLOBAL
| |-------WMRootMenu
| |-------WMState
| |-------WMWindowAttributes
| |-------WPrefs
|-------Library/
|-------Icons/
|-------WindowMaker/
|-------autostart
|-------Backgrounds/
|-------IconSets/
|-------Pixmaps/
|-------plmenu
|-------Sounds/
|-------SoundSets/
|-------Styles/
|-------Themes/
复制代码
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-4-27 20:46:33
|
显示全部楼层
恭喜~~~
可以把源文件放[脚本欣赏区]吗?!;)
回复
支持
反对
使用道具
举报
显身卡
FMZW
FMZW
当前离线
积分
388
IP卡
狗仔卡
发表于 2003-4-28 19:40:04
|
显示全部楼层
两位斑竹,我对上面的脚本有些不理解:
if(...)后,then之前还要加分号吗?
还有,我把这个脚本输入后执行不了,说是有个else有问题(就是第一个redir $(ls $thisfile)后的else),不知为什么,请指教。
错误提示好象是什么near unexpected token else...
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
3
4
5
6
/ 6 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
BSD 讨论专题
Redhat/Fedora/CentOS Linux
Mandriva Linux
Linux 基础讨论区(新手速成)
Archlinux讨论区
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表