协慌网

登录 贡献 社区

在 bash 中仅使用 ls 列出目录:检查

此命令列出当前路径中的目录: ls -d */

模式究竟是什么*/做什么?

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

答案

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

完成此操作的四种方法,每种方式都有不同的输出格式

1. 使用echo

示例: 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. 使用lsgrep

示例: 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 脚本(不推荐用于包含空格的文件名)

示例: for i in $(ls -d */); do echo ${i%%/}; done
这是我得到的:

cs  
draft  
files  
hacks  
masters  
static

如果你想把 '/' 作为结束字符,那么命令将是: for i in $(ls -d */); do echo ${i}; done

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

我用:

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

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

我的两分钱。