问题描述
我需要搜索以某些特定名称开头的文件。可以有多个以特定模式开头的文件,我想列出目录中存在的所有此类文件。
最佳办法
完成现有答案:
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