Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18689856
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-05-02 09:49:57

下面的短小的程序可以列出, 充分利用了强大的模式匹配能力.

如下:
#!/bin/sh
# dtree: Usage: dtree [any directory]
dir=${1:-.}
(cd $dir; pwd)
find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"

注:此脚本有点小问题,希望大家还是自己实践一下吧~

下面是改进好的脚本
特别感谢作者:LYOO兄
代码:
#!/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
阅读(2120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~