当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

最佳办法

完成现有答案:

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来搜索给定的pattern,例如:

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

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

次佳办法

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

find . -type f -name "abc*" 

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

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

您也可以使用

 -iname
 -regex 

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

第三种办法

有很多方法可以完成此操作,具体取决于您要对它们执行什么操作。通常,如果只想列出它们,则可以在终端中使用以下方法进行:

find | grep '^\./ABC'

…,然后用您的文本替换ABC

为了理解该命令,让我们对其进行分解:

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

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

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

    • 请注意,该模式用单引号' '引起来,以防止 shell 解释其中的特殊字符。

  • 现在,模式本身是用一种称为正则表达式(简称regex)的特定语法编写的。如果您掌握了Regex,则Regex是一个功能非常强大的搜索工具,并且诸如this之类的网站可以为您提供更深入的了解,但是请注意,grep并非full-fledged Regex引擎,您无法使用它做任何事情。

  • 为了我们的目的:

    • 正则表达式中的^匹配字符串的开头;如果它不在文件名的开头,则可以防止它与模式匹配。

    • 正则表达式中的.也具有特殊含义:它的意思是“在此匹配任何单个字符”。如果要将其用作文字点,则必须在其前面使用反斜杠\对其进行”escape”。 (是的,匹配任何字符在我们的案例中都是无害的,但出于完整性考虑,我还是这样做了。)

第四种办法

您可以使用GREP,我认为这是最简单的解决方案,可能还添加了其他一些grep参数以使匹配更加准确

tree | grep ABC

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10710.html,未经允许,请勿转载。