这些 ls 命令行参数有什么区别:-d vs *

这些 ls 命令行参数有什么区别:-d vs *

有什么区别

ls /example or ls /example/

对比

ls -d /example/*

为什么它们给出(几乎)相同的输出?

答案1

在第一种情况下,你给予ls一个目录并要求显示其内容。

在第二种情况下,你已经给予ls直接显示内容(单个文件和子目录的列表),并要求准确显示这些项目,但不是其进一步的内容。

因此它们给出相同的输出,因为它们几乎是同样的事情,只是前一种情况ls本身就决定了它需要显示什么内容,而在后一种情况下,您需要给它一个预先确定的列表。


負責有两种模式:当给定一个文件时,它只显示该文件;当给定一个目录时,它显示内容该目录(深度为一个级别)。

/example是一个目录,因此当你使用时ls /examplels将显示其内容。该-d选项禁用此行为,并使ls 总是仅显示给定的项目,无论它是否是文件。

(比较:ls -l /etcls -l -d /etc

但是当你使用 时ls -d /example/*,你不是要求它显示目录——而是给它单个项目的列表显示。在运行命令之前,您的 shell 会扩展通配符,因此您实际运行的是ls -d /example/file1 /example/file2 /example/file3

答案2

当 的参数ls是目录时,ls进入目录并列出目录内容,除非使用 调用-d。请记住,文件名扩展 ('file*') 是在调用 ls 之前在 shell 中完成的,因此您有:

dir
├── file1
└── subdir
    └── file2
  • ls dir列出内容dir( 一行file1, 一行subdir
  • ls -d dir仅列出dir(一行)
  • ls dir/*扩展为ls dir/file1 dir/subdir,因此扩展subdir为列出其内容
  • ls -d dir/*扩展为ls dir/file1 dir/subdir,但由于-d subdir没有扩展 且 仅列出file1subdir(因此您获得与第一种情况相同的输出)。

相关内容