LinuxSir.cn,穿越时空的Linuxsir!

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

bash脚本输出一个有层次感的目录

[复制链接]
发表于 2010-3-4 13:24:31 | 显示全部楼层 |阅读模式
就是做到如下的格式
dir_a
  sub_dir_a
    sub_file1
    sub_file2
  sub_dir_b
    sub_sub_dir_a
      sub_file_file1
dir_b
  sub_file3
可是不大对,大家能帮我看看嘛,谢谢了,另外刚学shell,觉得用set -x调试看不大清楚,有什么别的调试方法吗?  
#! /bin/bash

output(){
        file=$1;blank=$2;
        if [ -d $file ] && [ $file != '.'] && [ $file != '..'];then
                for((n=1;n<$blank;n++));do
                        echo -n " ";   #输出前导空格
                done
                echo $file
                filelist=$(cd $file;ls -a);
                for f in $filelist;do
                        output $f $((blank+1))
                done
        else
                for((n=1;n<$blank;n++));do
                        echo -n " "
                done
                echo $file
        fi
}

for ff in "$@";do
        output $ff 1;
done
发表于 2010-3-4 14:41:21 | 显示全部楼层
tree命令不就可以了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-4 19:35:20 | 显示全部楼层
我是想知道这里哪里出问题了
回复 支持 反对

使用道具 举报

发表于 2010-3-5 08:34:09 | 显示全部楼层
Post by rpbear;2073162
我是想知道这里哪里出问题了


bashdb
回复 支持 反对

使用道具 举报

发表于 2010-3-8 14:25:40 | 显示全部楼层
你是练习shell而已还是确实需要这么个程序?
有一个小工具叫"tree"可以实现优雅的目录树打印,你可以直接用。
回复 支持 反对

使用道具 举报

发表于 2010-3-8 17:55:02 | 显示全部楼层
  1. #! /bin/bash ###所有变量$f,$ff,$file要加双引号
  2. output(){
  3. file=$1;blank=$2;###不要用变量blank,直接用$2
  4. if [ -d $file ] && [ $file != '.'] && [ $file != '..'];then ####这里]前要空格
  5. for((n=1;n<$blank;n++));do
  6. echo -n " "; #输出前导空格
  7. done
  8. echo $file
  9. filelist=$(cd $file;ls -a);   #####这样不能处理带空格的文件名
  10. for f in $filelist;do            #####改用cd "$file";for f in * .*;do
  11. output $f $((blank+1))
  12. done
  13. else
  14. for((n=1;n<$blank;n++));do
  15. echo -n " "
  16. done
  17. echo $file
  18. fi
  19. }
  20. for ff in "$@";do
  21. output $ff 1;
  22. done
复制代码
改后
  1. #! /bin/bash
  2. output(){
  3. file=$1;
  4. if [ -d "$file" ] && [ "$file" != '.' ] && [ "$file" != '..' ];then
  5. for((n=1;n<$2;n++));do
  6. echo -n " ";
  7. done
  8. echo $file
  9. (cd "$file"
  10. for f in .* * ;do
  11. output "$f" $(($2+1))
  12. done)
  13. else
  14. for((n=1;n<$2;n++));do
  15. echo -n " "
  16. done
  17. echo $file
  18. fi
  19. }
  20. for ff in "$@";do
  21. output "$ff" 1;
  22. done
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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