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

R11*_*11G 91 regex search directory

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

Tak*_*kat 96

要完成现有答案:

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
Run Code Online (Sandbox Code Playgroud)

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


tree

如果我们需要在目录树中列出文件,我们还可以发出tree搜索给定模式的命令,例如:

tree -P 'abc*'  # list directory tree of file starting with abc---
tree -l 'def*'  # exclude files starting with def---
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么当我执行 `ls -l B*` 时,它会显示所有以 `B` 开头的目录的 *contents* 而不仅仅是匹配目录的名称? (2认同)
  • 不回答问题。`ls -d ABC*` 是作者要问的。代码片段中的注释也是错误的,`ls abc*` 列出了以 abc 开头的目录的 *content*。 (2认同)

dev*_*av2 56

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

find . -type f -name "abc*" 
Run Code Online (Sandbox Code Playgroud)

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

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

你也可以使用

 -iname
 -regex 
Run Code Online (Sandbox Code Playgroud)

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


Yam*_*aho 9

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

find | grep '^\./ABC'

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

为了理解这个命令,让我们把它分解一下:

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

  • 管道字符|将一个命令的输出重定向到另一个命令,在这种情况下,输出find重定向到grep. 这称为管道。

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

    • 请注意,该模式用单引号引起' '来,以防止 shell 解释其中的特殊字符。
  • 现在的模式本身是用称为特定语法的正则表达式,或正则表达式的简称。正则表达式是,如果你掌握了它一个非常强大的搜索工具,有网站如其中教你关于它的更深入,但请注意,grep不是全面的正则表达式引擎,你不能用它做的一切。

  • 为了我们的目的:

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

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

  • 为什么你会‘发现| grep` 当 `find` 有自己完美的模式匹配功能时? (3认同)