在一次通话中获取所有隐藏和非隐藏目录(仅限目录)列表的最简单方法是什么?
显然,我可以通过使用&&
连接2个不同的命令来实现:
ls -d ./.*/ && ls -d ./*/
但不应该有更好的方法吗?
编辑:我不希望当前目录包含在列表中。
此外,ls -d ./.*/ ./*/
是我在那里的更好的选择。
答案 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
其中:
输出示例:
.
├── 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