该命令列出当前路径下的目录:

ls -d */

模式*/到底做什么?

我们如何在上面的命令中给出绝对路径(例如ls -d /home/alice/Documents),只列出该路径下的目录?


当前回答

使用Perl:

ls | perl -nle 'print if -d;'

其他回答

有四种方法可以做到这一点,每种方法都有不同的输出格式

1. 使用回声

例如:echo */, echo */*/ 以下是我得到的:

cs/ draft/ files/ hacks/ masters/ static/  
cs/code/ files/images/ static/images/ static/stylesheets/  

2. 只使用ls

例如:ls -d */ 这就是我得到的答案:

cs/     files/      masters/  
draft/  hacks/      static/  

或者作为列表(包含详细信息):ls -dl */

3.使用ls和grep

示例:ls -l | grep "^d" 以下是我得到的:

drwxr-xr-x  24 h  staff     816 Jun  8 10:55 cs  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 draft  
drwxr-xr-x   9 h  staff     306 Jun  8 10:55 files  
drwxr-xr-x   2 h  staff      68 Jun  9 13:19 hacks  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 masters  
drwxr-xr-x   4 h  staff     136 Jun  8 10:55 static  

4. Bash脚本(不推荐用于包含空格的文件名)

例如:$(ls -d */)中的i;执行echo ${i%%/};完成 以下是我得到的:

cs  
draft  
files  
hacks  
masters  
static

如果你想用'/'作为结尾字符,命令将是:for i in $(ls -d */);执行echo ${i};完成

cs/  
draft/  
files/  
hacks/  
masters/  
static/

显示没有/的文件夹列表:

ls -d */|sed 's|[/]||g'

使用Test -d测试项目是否为目录:

for i in $(ls); do test -d $i && echo $i ; done

下面是我只列出目录名的方法:

ls -1d /some/folder/*/ | awk -F "/" "{print \$(NF-1)}"
file * | grep directory

输出(在我的机器上)——

[root@rhel6 ~]# file * | grep directory
mongo-example-master:    directory
nostarch:                directory
scriptzz:                directory
splunk:                  directory
testdir:                 directory

以上输出可以通过使用cut进行进一步细化:

file * | grep directory | cut -d':' -f1
mongo-example-master
nostarch
scriptzz
splunk
testdir

* could be replaced with any path that's permitted
 file - determine file type
 grep - searches for string named directory
 -d - to specify a field delimiter
 -f1 - denotes field 1