列出树结构中的目录和文件

时间:2016-04-18 16:41:23

标签: shell sed

我试图按以下方式列出其中包含的目录和文件:

 DIR: name1
   file1
   file2
   file3
   DIR: name2
     file4
     file5
     file6
  DIR: name3
   file7

到目前为止,我已经想出了一种使用findsed来获取树结构的方法,如下所示:

find . | sed -e "s/[^-][^\/]*\//  |/g"

我不知道如何区分文件和目录,以便能够在目录名称前面添加DIR:

2 个答案:

答案 0 :(得分:4)

尝试使用树和GNU sed:

tree -F coreutils-8.9 | sed -r 's|── (.*)/$|── DIR: \1|'

输出(示例):

coreutils-8.9
├── ABOUT-NLS
├── bootstrap.conf
├── DIR: build-aux
│   ├── announce-gen*
│   ├── arg-nonnull.h
│   └── ylwrap*
├── cfg.mk
├── ChangeLog
├── DIR: doc
│   ├── ChangeLog-2007
│   └── constants.texi
└── TODO

我认为文件名不包含"──"。

答案 1 :(得分:3)

如果您没有find,可以使用GNU $ find . -mindepth 1 -printf '%y %p\n' d ./dir1 d ./dir1/dir2 f ./dir1/dir2/fileA d ./dir1/dir3 f ./dir1/fileC f ./fileB 来识别目录与文件:

$ find . -mindepth 1 -printf '%y %p\n' |
    awk '$1=="d"{sub(/.*\//,"&DIR: ")} {gsub(/[^\/]*\//,"  ")} 1'
  DIR: dir1
    DIR: dir2
      fileA
    DIR: dir3
    fileC
  fileB

然后使用awk解析输出以创建缩进等。

PHP