免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: youshuang
打印 上一主题 下一主题

当前目录生成XML文件 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-04-17 23:00 |只看该作者
可以把ls换成find以获取路径,然后通过awk的NF值处理缩进量。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
22 [报告]
发表于 2009-04-17 23:07 |只看该作者
原帖由 kwokcn 于 2009-4-17 23:00 发表
通过awk的NF值处理缩进量。



有道理啊,我居然用了gsub

论坛徽章:
0
23 [报告]
发表于 2009-04-17 23:16 |只看该作者

  1. file  mydir.sh
  2. #!/bin/bash

  3. function mydir()
  4. {
  5.     local TAB="    $1"
  6.     local DIR="$2"
  7.     cd "$DIR"
  8.     echo -n "$1<$(basename "$DIR")>"
  9.     ls * &>/dev/null
  10.     [ $? -ne 0 ] && echo "</$(basename "$DIR")>" && return
  11.     echo
  12.     for file in *
  13.     do
  14.         if [ -d "$DIR/$file" -a -x "$DIR/$file" ];then
  15.             mydir "$TAB" "$DIR/$file"
  16.         else
  17.             echo "$TAB$file"
  18.         fi
  19.     done
  20.     echo "$1</$(basename "$DIR")>"
  21. }

  22. mydir "" "$1"

  23. chmod +x mydir.sh

  24. ./mydir.sh 目录
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
24 [报告]
发表于 2009-04-17 23:39 |只看该作者

回复 #22 springwind426 的帖子

springwind426, 这好像不是LZ的要求哦。

这个问题应该用xml工具来处理。

[ 本帖最后由 blackold 于 2009-4-17 23:41 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2009-04-18 08:54 |只看该作者

回复 #1 youshuang 的帖子

谢谢了各位了,尤其是beginner-bj
kvkingdom 大侠的方法相当不错了,积分给你了。

论坛徽章:
0
26 [报告]
发表于 2009-04-18 10:18 |只看该作者
原帖由 blackold 于 2009-4-17 23:39 发表
springwind426, 这好像不是LZ的要求哦。

这个问题应该用xml工具来处理。



他不是想得到XML格式的目录列表吗?


  1. <a>
  2.     <b></b>  #空目录
  3.     <c>
  4.          <d>
  5.               e #文件
  6.               <f>
  7.                   h
  8.               </f>
  9.         </d>
  10.         i
  11.         j
  12.         k
  13.     </c>
  14.     l
  15.     m
  16.     n
  17. </a>
复制代码


不是这样的?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
27 [报告]
发表于 2009-04-18 10:22 |只看该作者

回复 #26 springwind426 的帖子

没错。你的代码好像没有显示子目录。我测试的结果不对啊。

论坛徽章:
0
28 [报告]
发表于 2009-04-18 10:53 |只看该作者
原帖由 blackold 于 2009-4-18 10:22 发表
没错。你的代码好像没有显示子目录。我测试的结果不对啊。



确实有部分错误:

做如下修改就可以了

  1. #!/bin/bash

  2. function mydir()
  3. {
  4.     local TAB="    $1"
  5.     local DIR="$2"
  6. #测试是否是空目录
  7.     ls "$DIR"/* &>/dev/null
  8.     [ $? -ne 0 ] && echo "$1<$(basename "$DIR")></$(basename "$DIR")>" && return

  9.     echo "$1<$(basename "$DIR")>"
  10.     for file in "$DIR"/*
  11.     do
  12.         if [ -d "$file" -a -x "$file" ];then  #测试是否目录可进入
  13.             mydir "$TAB" "$file"
  14.         elif [ -d "$file" ];then  #目录无权进入
  15.             echo "$TAB<$(basename "$file")></$(basename "$file")>"
  16.         else
  17.             echo "$TAB$(basename "$file")"
  18.         fi
  19.     done
  20.     echo "$1</$(basename "$DIR")>"
  21. }

  22. mydir "" "$1"
复制代码

[ 本帖最后由 springwind426 于 2009-4-18 11:13 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2009-04-18 11:39 |只看该作者

回复 #28 springwind426 的帖子

这个更好....

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
30 [报告]
发表于 2009-04-18 11:51 |只看该作者
补习了bash function,也写个“纯bash“的递归函数:

treexml.sh
#!/bin/bash
# 以xml文件显示目录树

function dirxml ()
{
  local b=${1%/}
  local tb=$2

  b=${b##*/}

  if [ -a $1 ];then
    for ((t=${tb};t>0;t--));do printf "    ";done
    if [ -d $1 ];then
      printf "<$b>\n"
      for i in ${1%/}/*;do dirxml $i $((tb+1));done
      for ((t=${tb};t>0;t--));do printf "    ";done
      printf "</$b>\n"
    else
      printf "${b}\n"
    fi
  fi
}

if [ "$#" -ne 1 ];then
    echo "INPUT ERROR"
    exit 1
else
    t=0
fi

dirxml $1 $t

  1. ./treexml.sh urfile
复制代码


速度比较快!

[ 本帖最后由 blackold 于 2009-4-18 14:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP