如何在目录中搜索所有以名称“ABC”开头的文件?

如何在目录中搜索所有以名称“ABC”开头的文件?

我需要搜索以某个特定名称开头的文件。可能有多个文件以某个特定模式开头,我想列出目录中存在的所有此类文件。

答案1

要完成现有答案:

ls

默认目录列表实用程序ls可以与 shell 的通配符结合使用。要搜索具有模式的所有文件abc

ls -d abc*   # list all files starting with abc---
ls -d *abc*  # list all files containing --abc--
ls -d *abc   # list all files ending with --abc

请注意,文件扩展名也与搜索结果相关。


tree

如果我们需要列出目录树中的文件,我们也可以发出tree搜索给定的图案喜欢:

tree -P 'abc*'  # list directory tree of file starting with abc---
tree -l 'def*'  # exclude files starting with def---

在这种情况下,tree它本身支持通配符。

答案2

您可以使用find命令搜索具有模式的文件

find . -type f -name "abc*" 

上述命令将在当前工作目录下搜索以 abc 开头的文件。

-name 'abc'将列出完全匹配的文件。例如:abc

您还可以使用

 -iname
 -regex 

find使用模式搜索文件名的命令选项

答案3

有很多方法可以做到这一点,具体取决于你想用它们做什么。通常,如果你只想列出它们,你可以在终端中使用以下命令进行操作:

find | grep '^\./ABC'

...并ABC用您的文本替换。

为了理解该命令,让我们稍微分解一下:

  • find列出当前目录及其子目录下的所有文件;单独使用它将仅列出那里的所有内容。请注意,find输出以 开头的每个文件或目录./,表示它们的路径是相对于当前目录的。意识到这一点很重要,因为这意味着我们将搜索以 开头的结果,./ABC而不仅仅是ABC

  • 管道符|将一个命令的输出重定向到另一个命令,在本例中, 的输出find被重定向到grep。这称为管道。

  • grep获取输出并使用给定的模式对其进行过滤^\./ABC

    • 请注意,该模式用单引号引起来,' '以防止 shell 解释其中的特殊字符。
  • 现在模式本身是用一种特殊的语法编写的,称为正则表达式, 或者正则表达式简称。如果你掌握了正则表达式,它就是一个非常强大的搜索工具,并且有以下网站:它会更深入地教你关于它的知识,但请注意,它grep不是一个成熟的正则表达式引擎,你不能用它做所有事情。

  • 我们的目的是:

    • ^在正则表达式中匹配字符串的开头;如果它没有出现在文件名的开头,这会阻止它匹配模式。

    • .正则表达式中的 也有特殊含义:它表示“匹配此处的任意单个字符”。如果您想将其用作文字点,则必须\在其前使用反斜杠将其“转义”。(是的,在我们的例子中匹配任何字符都是无害的,但我这样做是为了完整性。)

答案4

对我来说最简单的解决办法

ls | grep PATTERN

您可以在此处在 PATTERN 中给出任何正则表达式。

例如,要查找名称中包含“ab”的文件,请键入

ls | grep ".*ab.*"

要查找以“ab”开头的文件,请键入

ls | grep "^ab"

相关内容