带通配符的 `ls` 和子目录

带通配符的 `ls` 和子目录

当我执行命令时ls *,它会显示

  1. 当前目录中的文件
  2. 当前目录中的目录
  3. 当前目录中的目录中的文件和目录。

当我使用时,ls我不想看到当前目录中的目录。我有点困惑,因为我使用 ubuntu 已经 8 年多了,我从来没有见过这样的事情。

这是ls应该怎么做的?有办法阻止这种3情况发生吗?

例如,如果我有file1.file folder1 folder2 folder3 textfile1.txt

我希望 ls f* 仅显示

file1.file
folder1
folder2
folder3

Ubuntu 20.04 LTS

答案1

您希望它像在 MS-DOS 中一样工作,然而,这是 Linux。

Linux 中的通配符由您的 shell 扩展以匹配所有符合通配符的项目。ls看不到您的通配符。它只看到与通配符匹配的文件和目录名称列表。因此它将显示列出的所有项目的内容,即文件的名称或文件夹的内容。在 MS-DOS 中,通配符会导致命令dir本身过滤列表以仅列出符合通配符的名称。

要过滤的输出ls,例如,仅查看匹配的文件和文件夹名称f*,请使用grep,即将 ls 的输出通过管道传输到 grep 中,如下所示:

ls | grep ^f.*

^.*是正则表达式。^f意思是:f但只在最开始。.*意思是.任意字符*任意次。

答案2

一种方法是使用find命令而不是ls。您可以使用-maxdepth 1这样您就不会读入文件夹,并且只使用-name通配符选项。

例子:

find . -maxdepth 1 -name 'f*'

将返回当前文件夹中.以小写字母开头的所有内容f,但不会显示文件夹内的任何内容。

相关内容