我进入ls的man page,-d选项的入口如下:
-d, --directory 列出目录条目而不是内容,并且不取消引用?符号链接
所以,我认为 ls -d 将显示给定目录中的所有目录。但是我进入了一个目录并尝试了两个不同的命令:
获取目录:ls -l | grep ^d
这个有效,显示了所有 7 个目录
用ls -d获取目录 这不显示7个目录,只显示一个点“.”
我不明白是我错误地使用了该选项还是误解了它的含义,-d 选项的实际含义和用法是什么?
Ben*_*man 13
ls -d
显示有关目录或符号链接的信息 - 此信息(简单来说)是其各自的路径。合乎逻辑的假设是d代表directory,因为它是我遇到的 UNIX 术语中最基本的定义是“列出目录”。
这从表面上看似乎没有那么有用;假设您当前驻留在具有 2 个子目录的目录中:
documents
music
使用不ls documents
带任何选项会给您一个文档内容列表,正如您在上面正确说明的那样。使用ls -d documents
只会打印名称 - 因为该文件夹的路径,相对于您当前所在的位置 - 与其名称相同 -文档!这可以扩展(尽管它的基本用法有些多余)ls -d $PWD/*
将显示所有文件和文件夹,但带有它们的工作目录(因此是 PWD - 以前的工作目录)。
与 * 运算符结合使用时,它确实有一个有用的功能 -ls -d */
将仅显示当前工作目录中的目录。
将焦点转向定义的符号链接部分,如果您要使用ls -d ~
- 波浪号扩展 - 它会打印当前 HOME 目录的路径。然后这可以用于不同的应用程序(取决于操作系统)并且确实有一些实际用途;您可以将您的语句进一步修改为ls -d ~your-username
,ls -d ~another-username
或者ls -d ~root
为这些用户提供 HOME 路径。另一个例子可以在 apache 服务器环境中看到,这里使用用户名类似地显示其托管空间的路径(相对而言,他们的 HOME 目录)。
有多种功能可以与此结合使用,但以上涵盖了操作符背后的核心功能——简而言之,-d 是一个用于专门显示目录/路径信息的操作符。如果您想进一步研究,有一个很好的代码生成器可以使用 ls 函数(包括一些 -d 功能):ls code generator。
ls
本身,没有选项或任何东西,将“列出当前目录”。默认情况下,“列出目录”是指其中包含的文件。
该-d
标志更改为ls
不列出指定目录中的文件,而是列出有关目录本身的信息。它不是,正如您错误地认为的那样,指的是“当前目录中的目录”。它仅指“当前目录”。
这就是为什么ls -d
只返回.
.
小智 5
不确定术语,但 ls -d 只列出有关后续内容的信息,仅此而已,即它不扩展目录列表,因此:
ls -ld /usr/bin
Run Code Online (Sandbox Code Playgroud)
只会给你一行关于 /usr/bin 本身的输出。
和
ls -ld *
Run Code Online (Sandbox Code Playgroud)
只会为您提供有关 pwd 中每个文件或目录的信息,但不会展开任何目录以列出其内容。
如前所述,您可以使用 find 列出目录,如果您愿意,仍然可以使用 ls -d :
find /usr/bin -type d -exec ls -ld {} \;
Run Code Online (Sandbox Code Playgroud)
那就是查找 /usr/bin 下的所有目录,以防不清楚。
归档时间: |
|
查看次数: |
30769 次 |
最近记录: |