在 Centos 和 Debian 上我尝试过这个。
ls 命令中的 * 是否意味着递归搜索?
如果我开始输入目录名称并点击选项卡,我会看到以下内容:
# ls /etc/rc<tab>
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.local rcS.d/
我想如果我在路径中添加一个星号,我会看到同样的东西,但它却进行了递归搜索:
# ls /etc/rc*
/etc/rc.local
/etc/rc0.d:
K50netconsole K90network
/etc/rc1.d:
K50netconsole K90network
/etc/rc2.d:
K50netconsole S10network
/etc/rc3.d:
K50netconsole S10network
...
windows dir 命令只会显示与 /etc/rc* 匹配的目录,如何从 ls 获得此行为(不使用 Tab 键)?
****编辑/更新:
好吧,现在我明白 * 是由 bash 而不是命令解释的,但它总是被解释为“枚举文件和文件夹条目”,或者如果我在不同的上下文中使用它,它会做其他事情吗?如果是的话,是否有一些大的东西? bash 中的 if 语句表示“if * 与文件系统路径一起使用,返回文件和文件夹名称,if * 与 rpm 一起使用(例如rpm -qa 帖子*) 返回包名称等”
答案1
星号在到达ls
命令之前会展开,因此这相当于
ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d ...
它将分别列出每个目录的内容。
您可能想要使用ls -d /etc/rc*
禁止列出目录内的文件,或使用仅显示扩展名的命令,例如echo /etc/rc*
.
答案2
默认情况下,如果您ls
使用目录参数调用,它将显示目录的内容。您可以使用该选项更改该行为-d
。从man ls
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links