LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 971|回复: 5

如何列出目录树

[复制链接]
发表于 2004-12-3 18:25:29 | 显示全部楼层 |阅读模式
用 ls -R 的显示中,连文件列列出来了,怎么样才能只将目录结构列出来(递归),我试过 ls -Rd 不过不行
发表于 2004-12-3 18:31:24 | 显示全部楼层
tree -d
 楼主| 发表于 2004-12-3 19:12:17 | 显示全部楼层
tree这个命令是哪个包里的?  我在rh9下面怎么没有?
发表于 2004-12-3 19:24:30 | 显示全部楼层
我要如何列出整個目錄樹呢?

底下有幾種做法自己挑一個吧:

        ls -R             (not all versions of "ls" have -R)
        find . -print     (should work everywhere)
        du -a .           (shows you both the name and size)

若你要找的是特定的檔案,例如說是檔名結尾為 ".c" 者,可用

        find . -name '*.c' -print

"find" 是一隻很?姾芎糜玫某淌健V档靡粚W。
发表于 2004-12-3 19:25:21 | 显示全部楼层
列出目录树
2004-04-23 15:18 pm
作者:作者
来自:Linux知识宝库
现载:http://www.linuxhero.com/docs
地址:无名

  下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力.
  目录树形式如下:
  .
  `----shellp
  `----updates
  `----wu-ftpd-2.4
  | `----doc
  | | `----examples
  | `----src
  | | `----config
  | | `----makefiles
  | `----support
  | | `----makefiles
  | | `----man
  | `----util
  脚本如下:
  #!/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"


看看这个帖子:
http://www.linuxsir.cn/forum.php ... 6%C4%BF%C2%BC%CA%F7


  1. #!/bin/bash

  2. redir ()
  3. {
  4.         #tab是真正的步长计算器
  5.         tab=$tab$singletab
  6.         line=${tab%"$singletab"}"|-------"

  7.         #local比较关键,它规定了count是当前的参数列表值
  8.         local count=$#

  9.         for file in "$@"; do
  10.                 thisfile=${thisfile:-$PWD}/$file

  11.                 #判断当前文件是否为目录,如果是就开始递归   
  12.                 if [ -d "$thisfile" ]; then
  13.                         
  14.                         #如果当前目录是分枝列表的最底层,则需进行特殊处理。
  15.                         if [ $count -eq 1 ]; then
  16.                                 echo -e $line$file/
  17.                                 #将前一个|符号去掉,看看目录树就知道为什么了。
  18.                                 tab=${tab%"$singletab"}"\t"
  19.                                 redir $(ls $thisfile)
  20.                         else

  21.                                 echo -e $line$file/
  22.                                 redir $(ls $thisfile)
  23.                         fi
  24.                         
  25.                 else
  26.                         echo -e $line$file
  27.                 fi
  28.                
  29.                 thisfile=${thisfile%/*}
  30.                 let count=count-1      
  31.         done
  32.         
  33.         #这一步比较有意思,因为从递归出来的tab结尾可能是TAB也可能是$singletab,所以分成两步来去掉。
  34.         tab=${tab%"\t"}
  35.         tab=${tab%"|"}
  36.         line=${tab%"$singletab"}"|-------"
  37. }


  38. singletab="|\t"
  39. userinput="$@"
  40. if ls $userinput; then

  41.         for file in ${userinput:-.}; do
  42.                 echo $file
  43.                 echo '|'
  44.                 if [ -d "$file" ]; then
  45.                         cd $file
  46.                         redir $(ls)
  47.                         cd ..
  48.                 fi
  49.         done
  50. else
  51.         echo "$userinput is wrong"
  52. fi
复制代码

http://www.linuxsir.cn/forum.php ... 6%C4%BF%C2%BC%CA%F7
发表于 2004-12-3 21:31:30 | 显示全部楼层
tree-1.4b3-3mdk
我使用的MDK 你可以去rpm站点搜索一下符合自己系统的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表