如何使用 shell 命令列出以“s”为第一个字符、以“l”为最后一个字符的文件?

如何使用 shell 命令列出以“s”为第一个字符、以“l”为最后一个字符的文件?

我正在尝试列出以“s”和“l”开头的文件。

我正在尝试的命令是ls -l *sfa*

答案1

问题不是很清楚...根据您对@cmks 的评论,这里有两个选项:

  1. 如果您要查找文件名第一个字符为“s”且最后一个字符为“l”的文件 - 那么使用ls -l s*l

  2. 如果您要查找文件名的第一个字符是(“a”或“s”)并且最后一个字符是(“a”或“l”)的文件 - 那么使用ls [as]*[al]

如果是其他问题,请编辑您的问题以澄清...

您的版本ls -l sfa将仅列出名称为“sfa”的文件(或者,如果有同名的目录,则列出该目录中的所有文件)。它似乎无法满足您的要求。


匹配文件名(“globbing”)的规则非常简单:

  1. “?”匹配任意单个字符
  2. “*” 匹配任意数量(零个或多个)的字符
  3. 使用方括号 ([]) 匹配集合中的单个字符:[fqsb] 匹配 f、q、s 或 b;[bd] 匹配 b、c 或 d
  4. 使用花括号 ({}} 来匹配几个特定字符串之一:{foo,bar} 匹配“foo”或“bar”。

目录分隔符“/”被排除在匹配之外——匹配仅针对文件名进行。

也可以看看Shell 通配符在 Ubuntu 帮助中。

答案2

ls -l s*l
ls -l s?l
  • “*” 表示 0 个或多个字符
  • 如果您想知道“s”和“l”之间的字母数量,则“?”表示 1 个字符。2 个“??”表示 2 个字符。
  • 您还可以将集合放在 [] 之间。因此ls -l s[a-z]l将其限制为sal通过szl

来自评论:

如果您想要以“s”和“a”开头的文件,您可以使用集合:

ls -l [sa]*

将列出以这 2 个字母开头的所有文件。您可以使用它来创建各种组。例如 [sa][df][1ojwfihwef]* 将使其搜索以 3 个字母开头且每个字母都与该特定组匹配的文件

答案3

ls您可以一次为命令提供多个参数:

ls -l H* *l

实际情况是,shell 执行了Pathname Expansion。你可以在 bash 的手册页中阅读更多相关信息:

man bash

因为是shell做的,所以shell调用该命令ls如下:

ls -l Hejo Hesja Hejan Lesl Lesil Lesul Lestl

输入后即可理解,它不是命令ls而是 shell 来查找匹配的路径名。

答案4

除了使用ls命令和 shell 的通配符之外,还可以使用find命令。

$ find -maxdepth 1 -iname "s*l"                                                                       
./script.pl
./storm carl
./sal
./simple_curl

相关内容