`ls -d */` 和 `ls -d *` 之间的区别?

`ls -d */` 和 `ls -d *` 之间的区别?

我正在努力理解 ls -d 的工作原理。我已经阅读了其他 ls -d 问题,但没有一个问为什么ls -d *与 ls -d 的工作方式不同ls -d */。为什么末尾的分隔符如此重要?

ls *ls */以同样的方式行事,所以我期望ls -d *ls -d */以同样的方式工作。

相反, ls -d *就像执行 一样列出当前目录中的所有文件ls,而ls -d */列出当前目录中的目录。为什么会这样呢?

答案1

ls *ls */以同样的方式行事。

不,他们没有。如果工作目录中有文件,它们将与第一个命令一起列出,但不会与第二个命令一起列出。

ls将列出在命令行上传递的文件和目录(包括其内容)。如果您使用 shell 通配符,您的 shell 将替换图案“按字母顺序排列的文件名列表”(参见文件名扩展)。

该模式*将匹配当前目录中的每个文件和目录(不包括以 开头的隐藏文件.),而*/仅匹配目录(不包括隐藏目录)。

该开关-d禁用目录内容列表,但传递给 ls 的文件仍会列出。

答案2

答案是:结尾/强制 ls 只查看目录。

请注意,行为是一致的(有和没有-d)。

一个小测试:

mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test

然后执行ls *ls */您会注意到其中的差异。

相关内容