免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3456 | 回复: 15

[文件目录] 如何获取各级目录? [复制链接]

论坛徽章:
0
发表于 2015-03-20 23:18 |显示全部楼层
本帖最后由 fall221 于 2015-03-20 23:20 编辑

[fall@localhost ~]$ tree a
a
|__ b
|     |__ a.log
|     |
|     |__ c
|     |     |
|     |     |__d.log
|     |
|     |__cc
|
|___bb

给定a/b/c/d.log,想要得到以下输出(也就是列出文件所在的各级目录,每个一个),应该如何在一行内搞定?
a
a/b
a/b/c

论坛徽章:
0
发表于 2015-03-20 23:23 |显示全部楼层
自己先顶一下

论坛徽章:
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
发表于 2015-03-20 23:35 |显示全部楼层
  1. find -type d
复制代码

论坛徽章:
0
发表于 2015-03-20 23:37 |显示全部楼层
perl -le '@_ = split "/", $ARGV[0];print join "/", @_[0...$_] foreach 0...$#_-1' a/b/c/d.log
a
a/b
a/b/c

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
发表于 2015-03-20 23:41 |显示全部楼层
  1. echo "a/b/c/test.log"|awk -F/ '{for(i=0;i++<(NF-1);){for(j=0;j++<i;){printf j==i?$j"\n":$j"/"}}}'
复制代码

论坛徽章:
0
发表于 2015-03-20 23:41 |显示全部楼层
好复杂的样子,根本看不懂!
回复 4# 45177659


   

论坛徽章:
0
发表于 2015-03-20 23:56 |显示全部楼层
这个代码不错~嘿嘿
不过,就没有不用循环或者少用一层循环的办法了吗?

回复 5# 我是一隻羊


   

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
发表于 2015-03-21 00:09 |显示全部楼层
  1. echo 'a/b/c/d.log'|sed -r ':1;s#^([^ ]+)/(.*)#\1 \1/\2#;t1;s/ [^ ]+$//;s/ /\n/g'
复制代码

论坛徽章:
0
发表于 2015-03-21 00:11 |显示全部楼层
稍有问题~
[fall@localhost src]$ echo 'a'|sed -r ':1;s#^([^ ]+)/(.*)#\1 \1/\2#;t1;s/ [^ ]+$//;s/ /\n/g'
a
[fall@localhost src]$ echo '/a'|sed -r ':1;s#^([^ ]+)/(.*)#\1 \1/\2#;t1;s/ [^ ]+$//;s/ /\n/g'
/a

回复 8# WilliBhamlll


   

论坛徽章:
0
发表于 2015-03-21 00:19 |显示全部楼层
[ 本帖最后由 45177659 于 2015-03-21 00:22 编辑 ]

这样可以不用循环,用正则式

perl -le '$ARGV[0] =~ s#/(?{print $`})##g;' a/b/c/d.log

a
a/b
a/b/c
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP