为什么这个通配符不能按我期望的方式工作?

为什么这个通配符不能按我期望的方式工作?

在我的用户文件夹中,我有类似的文件夹吊箱,文件,下载 &d擔命。

ls a*应该列出所有以 开头的文件a。对吧?但是当我输入命令 时ls d*,它不只是显示,而是dump显示转储目录的 ls。当我输入命令 时ls D*,它会显示以 开头的所有文件夹的 ls

那么我错过了什么部分呢?

编辑:附加屏幕截图 ls 截图

答案1

根据 bash 手册页:

bash 扫描每个单词以查找字符 *、? 和 [。如果出现其中一个字符,则该单词被视为模式,并替换为与该模式匹配的按字母顺序排序的文件名列表

并从信息节点ls

`ls' 程序列出有关文件(任何类型,包括目录)的信息。选项和文件参数可以像往常一样任意混合。

对于目录这样的非选项命令行参数,默认情况下“ls”会列出目录的内容(不递归),并且会忽略名称以“.”开头的文件。对于其他非选项参数,默认情况下“ls”仅列出文件名。如果未指定非选项参数,“ls”会列出当前目录的内容。

所以当你给予时ls d*d*扩展为以 d 开头的所有文件/目录名称的排序列表。因此你的命令变为

ls dump

由于 dump 是一个目录名,因此您可以获得目录“dump”中所有文件的列表,但是当您给出时ls D*D*扩展为“桌面文档下载 Dropbox",所以命令变成

ls Desktop Documents Downloads Dropbox

由于所有这些都是目录,因此您将获得单个目录中文件的列表。如果有一个文件以在当前目录中它将被单独列出。

答案2

ls d* 和 D* 分别列出与 d* 和 D* 匹配的文件和文件夹,行为相同,您的测试中一定有错误。

如果您只想列出文件夹名称而不列出文件夹内容,则需要使用“-d”:

ls -d D*

答案3

如上所述,-d选择是可行的。添加

alias ld='ls -d'

我的~/.bashrc文件对我来说效果很好。

相关内容