2010. 5. 29. 19:47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#! /bin/sh
 
usage(){
    echo "Usage: $0 [-a] [-f] [-h] [-p] [-s] [Directory]"
    echo " [Option] -a (-A) : directory and file"
    echo "          -f (-F) : output to file (dtree.text)"
    echo "          -h (-H) : help"
    echo "          -s (-S) : with block-number"
    exit 1
}
 
DIR=`pwd`
OPT=""
OPT1=""
 
tailr() {
    awk '{
        line[NR] = $0  
    }
    END {
        for(i=NR; i>0; i--) print line[i]
    }'
}
 
for kinta in $*
do
    case $kinta in
        -[aA]) OPT="-a"  ;;
        -[sS]) OPT1="-s" ;;
        -[fF]) dtree.sh $OPT $OPT1 $DIR > dtree.text
               echo " dtree.text [done]"
               exit 0    ;;
        -[hH]) usage     ;;
        *)  if [ -d $kinta ] ;then
                echo -n ""
            else
                echo -n "Directory or Option not found : "
                echo $kinta
                usage
            fi
            DIR=`(cd $kinta; pwd)`
            break 1
            ;;
    esac
done
 
#du | awk | tailr
 
du $OPT $DIR |
 
awk '
BEGIN {
    save_cnt=0
    base_cnt = length("'"$DIR"'")
    for(i=1; i<100; i++)
        nest[i]=0
    opt="'"$OPT1"'"
}
{
    cnt=1
    for(i=length($2); i>base_cnt; --i) {
        if(substr($2,i,1) == "/")
            cnt++
    }
    len=0
    for(scnt=length($2); scnt; --scnt) {
        if(substr($2,scnt,1) == "/") {
            scnt++
            break
        }
        len++
    }
 
    nest[cnt] = 1
    if (cnt < save_cnt) {
        nest[save_cnt] = 0
    }
    else if (cnt > save_cnt) {
        for(i=1; i<=save_cnt; ++i) {
            if(nest[i] == 1)
                printf "    |"
            else
                printf "     "
        }
        printf "\n"
    }
    for(i = 1; cnt != 1 && i <= cnt; ++i) {
        if (nest[i] == 1)
            printf "    |"
        else
            printf "     "
    }
    if (cnt == 1) {
        if (opt == "-s" )
            printf "   %s(%d)\n", $2, $1
        else
            printf "   %s\n", $2
    }
    else {
        if (opt == "-s")
            printf "-- %s(%d)\n", substr($2, scnt,len), $1
        else
            printf "-- %s\n", substr($2, scnt, len)
    }
    save_cnt = cnt
}
' | tailr


'Linux > ShellScript' 카테고리의 다른 글

ANSI Escape(ESC) character  (0) 2010.11.02
쉘내부 명령어  (0) 2010.10.28
[Script] 파일 점검 프로그램  (0) 2010.05.23
[if연산] test 관련 연산자  (0) 2010.05.23
쉘(Shell) 환경  (0) 2010.05.16
Posted by devanix