获取bash中的所有目录(隐藏和非隐藏)

时间:2017-12-12 20:06:50

标签: bash shell terminal

在一次通话中获取所有隐藏和非隐藏目录(仅限目录)列表的最简单方法是什么?

显然,我可以通过使用&&连接2个不同的命令来实现:

ls -d ./.*/ && ls -d ./*/

但不应该有更好的方法吗?

编辑:我不希望当前目录包含在列表中。

此外,ls -d ./.*/ ./*/是我在那里的更好的选择。

3 个答案:

答案 0 :(得分:4)

bash中,您不需要调用任何expternal实用程序来列出所有目录(包括隐藏目录)。只需使用:

# make sure we match entries starting with dot and return empty when list is empty
shopt -s dotglob nullglob

# print all the directories including ones starting with dot
printf '%s\n' */

答案 1 :(得分:2)

简单find应该这样做:

find /some/path -mindepth 1 -maxdepth 1 -type d

-maxdepth 1可确保您不会进入子目录。但是,如果这是你想要的,你可以删除它。

-mindepth 1确保find不包含目录本身。

答案 2 :(得分:1)

如果你有tree命令,你可以很好地查看你的目录:

tree -a -d -L 3

其中:

  • a - >显示隐藏和非隐藏
  • d - >只显示目录
  • L 3 - >限制深度(如果你想要无限深度,只需删除此选项)

输出示例:

.
├── bin
├── Common
├── .git
│   ├── branches
│   ├── hooks
│   ├── info
│   ├── logs
│   │   └── refs
│   ├── objects
│   │   ├── 08
│   │   ├── 38
│   │   ├── 62
│   │   ├── 6f
│   │   ├── 8c
│   │   ├── 9e
│   │   ├── a0
│   │   ├── cb
│   │   ├── d9
│   │   ├── info
│   │   └── pack
│   └── refs
│       ├── heads
│       ├── remotes
│       └── tags
├── Setup
├── test
└── tools

27 directories

您还可以获得目录数量。如果您不想要,请添加--noreport选项。

也可以排除模式等... man tree是你的朋友。

另一个例子:一个完整​​的目录列表,不包括obj*refs

tree -a -d -L 3 -if -I "obj*|refs" --noreport

返回:

.
./bin
./Common
./.git
./.git/branches
./.git/hooks
./.git/info
./.git/logs
./Setup
./test
./tools