Chinaunix首页 | 论坛 | 博客
  • 博客访问: 482060
  • 博文数量: 401
  • 博客积分: 244
  • 博客等级: 入伍新兵
  • 技术积分: 2215
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-04 10:02
文章分类

全部博文(401)

文章存档

2013年(37)

2012年(364)

分类: 系统运维

2013-05-31 12:33:17

#!/bin/sh## tree.sh# A tool that display the dictionary structure in dos's# tree command style.##      __@#  _ \## Tested on slackware, openbsd, netbsd, freebsd.## Just for fun.## The name of the ls program, please use# the absolute path, otherwise, there# may be get some strange errors.#LSPROG="/bin/ls"# COLOR DEFINE# ============#DIR="\033[01;34m"EXE="\033[01;32m"DEV="\033[01;33m"LNK="\033[01;36m"ZIP="\033[01;31m"SOCK="\033[01;35m"NULL="\033[00m"ROOT=${1:-.}TRUE=0FALSE=1LAYERS=0FILECOUNT=0DIRCOUNT=0# print_dash# ==========# Print the structure lines#print_dash(){local i=0local num=$1while [ $i -lt $num ]; do  echo -n "|"  for j in 1 2 3; do   echo -n " "  done  i=`expr $i + 1`doneecho -n "|-- "}# ispkg# =====# Test if the file is a package like:# .gz .tar .tgz .tar.gz .zip .rar .rpm# and etc.#ispkg(){local f=$1local i# Package extension list, you can add your coustom# extensions in it.#local pkg__ext=".gz .tar .tgz .tar.gz .zip .rar .rpm"# if the file's suffix contain any package extension# then cut it.for i in $pkg__ext; do  f=${f%$i}doneif [ "$f" != "$1" ]; then  return $TRUEelse  return $FALSEfi}# mktree# ======# The main function, that print the# dictionary structure in dos's tree# command style. It's runs in nesting.#mktree(){local ffor f in `$LSPROG -1 $1 2> /dev/null`; do  f=${f%/}  f=${f##*/}  # If dictionary then print it and enter  # the nesting block.  if [ -d $1/$f ]; then   print_dash $LAYERS   echo -e "${DIR}$f${NULL}"   DIRCOUNT=`expr $DIRCOUNT + 1`   LAYERS=`expr $LAYERS + 1`   mktree $1/$f  else   print_dash $LAYERS   # file is a symbol link   if [ -L $1/$f ]; then    echo -e "${LNK}$f${NULL}"   # file is executable   elif [ -x $1/$f ]; then    echo -e "${EXE}$f${NULL}"   # file is a device   elif [ -c $1/$f -o -b $1/$f ]; then    echo -e "${DEV}$f${NULL}"   # file is a socket   elif [ -S $1/$f ]; then    echo -e "${SOCK}$f${NULL}"   # file is a package   elif `ispkg $f`; then    echo -e "${ZIP}$f${NULL}"   else    echo -e "$f"   fi      FILECOUNT=`expr $FILECOUNT + 1`  fidoneLAYERS=`expr $LAYERS - 1`}echo $ROOTif [ "$1"X != "X" ]; thenmktree $1 #mktree $ROOTelsemktree $ROOTfiecho "\`" echo -e "${DIR}$DIRCOUNT${NULL} directories, ${DEV}$FILECOUNT${NULL} files"
阅读(1274) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~