如何找到名称包含给定字符串(例如“abcde”)的文件?

如何找到名称包含给定字符串(例如“abcde”)的文件?

在一组目录中,如何查找名称包含给定字符串(例如“abcde”)的文件?

答案1

find将查看目录结构并根据全局:

find /your/dir -name "*abcde*"

添加-type f开关将优化您的搜索条件,仅返回文件。

find /your/dir -type f -name "*abcde*"

您还可以包含其他开关,例如-maxdepth 2将搜索限制为指定目录以下的 2 级目录。

通过这种方式,您可以构建丰富的、高度针对性的搜索命令,该命令将快速返回您所需要的内容。

man find具有丰富的细节,包括-exec对返回的文件运行命令之类的操作find以及使用正则表达式的选项。

答案2

使用寻找:

find path-to-search -name '*abcde*'

答案3

如果locate适合您(速度很快,但只能与最近运行的一样好sudo updatedb)。您可以locate使用其自己的内置正则表达式工具运行...

这是一个参数驱动的脚本来执行您想要的操作。使用 $1 作为您要查找的“abcde”来调用它,并使用后续参数作为目录:

#!/bin/bash
a=("$@"); r=''
for ((i=1;i<${#a[@]};i++)); do r="$r|${a[i]}"; done
locate --regex  "(${r:1}).*/[^/]*${a[0]}[^/]*$"

调用示例如下所示:

$ ./script_name 'z' "$HOME/bin/perl" "$HOME/type/stuff"

正如建议的杰森·瑞恩,这是脚本的注释版本。
请记住locate 总是输出完全限定的路径。

#!/bin/bash

# Note: Do not use a trailing / for directory names
# 
# Any of the args can be an extended regex pattern. 
#
# Create an array `a` which contains "$1", "$2", "$3", etc... (ie. "$@")
# writing the $-args to an array like this (using quotes) solves 
#   any possible problem with embedded whitespace 
a=("$@")
#
# Set up an empty string which is to be built into a regex pattern 
#   of all directroy names (or an appropriate regex pattern)
r=''
#
# Each regex pattern is to be an extended regex    
# Each regex pattern is concatenated to the preceding one 
#   with the  extended-regex 'or' operator |
#
# Step through the array, starting at index 1 (ie, $2),
#   and build the 'regex-pattern' for the directories 
for ((i=1;i<${#a[@]};i++)); do r="$r|${a[i]}"; done
#
# Run 'locate' with
#                           |the target file pattern $1  | 
#                |zero-to-| |preceded and followed by    |
#                |-many   | |zero-to-many non-slash chars|
#                |anything| |               |‾‾‾‾‾‾‾‾‾‾‾‾
#                 ‾‾‾‾‾‾‾|| |               |   
locate --regex  "(${r:1}).*/[^/]*${a[0]}[^/]*$"
#        ________|      |  | 
#       |directory-regex| last
#       | in brackets ()| slash      
#       |stripped of its|
#       |leading "|"    |
#

答案4

locate abcde | egrep "(dirA|dirB|dirC)" 

对于目录集 dirA、dirB、dirC。

或 3 个查找命令。

相关内容