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

ls -d */

模式*/到底做什么?

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


当前回答

我使用:

ls -d */ | cut -f1 -d'/'

这将创建一个没有结尾斜杠的单列——在脚本中很有用。

其他回答

对于所有没有子文件夹的文件夹:

find /home/alice/Documents -maxdepth 1 -type d

对于所有带子文件夹的文件夹:

find /home/alice/Documents -type d

*/是一个匹配当前目录中所有子目录的模式(*将匹配所有文件和子目录;/将其限制为目录)。类似地,要列出/home/alice/Documents下的所有子目录,请使用ls -d /home/alice/Documents/*/

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

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 */ | cut -f1 -d'/'

这将创建一个没有结尾斜杠的单列——在脚本中很有用。

我只是把它添加到我的.bashrc文件中(如果你只需要/想要一个会话,你也可以在命令行上输入它):

alias lsd='ls -ld */'

然后lsd会产生想要的结果。