ls -d 是什么意思?

ls -d 是什么意思?

我进入了man page ls,选项的条目-d如下:

-d, --directory 列出目录条目而不是内容,并且不取消引用符号链接

所以,我认为该ls -d命令将显示给定目录中的所有目录。但是我进入一个目录并尝试了两个不同的命令:

  1. 获取目录::ls -l | grep ^d这个有效,所有 7 个目录都被显示

  2. 获取目录ls -d:这确实不是显示7个目录,仅一个点.

我不明白我是否错误地使用了该选项,或者是否误解了其含义,该-d选项的实际含义和用法是什么?

答案1

ls -d显示有关目录或符号链接的信息 - 该信息(简单来说)是其各自的路径。逻辑假设是d代表目录,因为我遇到的 UNIX 术语中最基本的定义是“列出目录”。

从表面上看,这似乎没什么用;但事实上,它并没有什么用处。假设您当前位于一个包含 2 个子目录的目录中:

documents music

不带任何选项使用ls documents会给你一个内容列表文件正如您在上面正确指出的那样。使用ls -d documents只会打印名称 - 因为该文件夹的路径相对于您当前所在的位置 - 与其名称相同 -文件!这可以扩展(尽管在基本用法上有些多余),ls -d $PWD/*它将显示所有文件和文件夹,但包含它们的工作目录(因此是 PWD - 以前的工作目录)。

当与 * 运算符结合使用时,它确实有一个有用的功能 -ls -d */将仅显示当前工作目录中的目录。

将焦点转向符号链接定义的一部分,如果您要使用ls -d ~- 波形符扩展 - 它将打印当前 HOME 目录的路径。然后,这可以用于不同的应用程序(取决于操作系统),并且确实有一些实际用途;您可以将您的语句进一步修改为或ls -d ~your-username并提供这些用户的 HOME 路径。另一个例子可以在 apache 服务器环境中看到,这里使用用户名类似地显示其托管空间的路径(相对而言,其 HOME 目录)。ls -d ~another-usernamels -d ~root

有多种功能可以与此结合使用,但上面涵盖了该运算符背后的核心功能 - 简而言之,-d 是一个专门显示目录/路径信息的运算符。如果您想进一步研究,有一个很好的代码生成器可以使用 ls 函数(包括一些 -d 功能):ls 代码生成器

答案2

ls本身,没有任何选项或任何东西,将“列出当前目录”。默认情况下,“列出目录”是指其中包含的文件。

-d标志更改ls不是列出指定目录中的文件,而是列出有关目录本身的信息。它并不像您错误地认为的那样,指的是“当前目录中的目录”。它仅指“当前目录”。

这就是为什么ls -d只返回.

答案3

不确定术语,但 ls -d 仅列出有关后续内容的信息,仅此而已,即它不会扩展目录列表,因此:

ls -ld /usr/bin

只会给你一行关于 /usr/bin 本身的输出。

ls -ld *

只会为您提供有关 pwd 中每个文件或目录的信息,但不会展开任何目录以列出其内容。

正如已经提到的,您可以使用 find 来列出目录,如果您愿意,仍然可以使用 ls -d :

find /usr/bin -type d -exec ls -ld {} \;

就是找到/usr/bin下的所有目录,以防不清楚。

答案4

ls -dls -d .与执行命令之前相同 ls,bash shell 将展开所有通配符。该-d选项指示ls仅列出有关传递的参数的信息,而不列出其内容,无论参数是目录还是文件。

为了进一步解释,举个例子ls .*为了进一步解释,以;。期望它会列出.以 为前缀的所有文件和目录。但是,当 bash 扩展通配符时,它也*包含.和。..您可以通过检查命令的输出来验证 bash 扩展的输出echo .*。对于ls .*bash 扩展 * (包括.和)后收到的每个参数..,如果参数是目录,它将列出内容。结果是一些输出不是您所期望的。

如果您使用ls -d .*相反的方式,“-d”选项指示仅列出参数的详细信息,而不列出其内容,即使它是目录也是如此。现在这将为您提供预期的输出。

相关内容