当我执行命令时ls *
,它会显示
- 当前目录中的文件
- 当前目录中的目录
- 当前目录中的目录中的文件和目录。
当我使用时,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
,但不会显示文件夹内的任何内容。