如何按目录和文件名组合模式搜索文件

如何按目录和文件名组合模式搜索文件

我想在文件系统中查找所有目录和子目录中名为“元数据”的所有 .xml 文件。有没有一种方法可以通过类似的模式进行搜索

find . -name  */metadata/*.xml" (mixing find command and Gradle paralance)

答案1

$ find / -path "*/metadata/*" -name "*.xml"

或者,更短(因为*与 一起使用时匹配超过路径名中的斜杠-path),

$ find / -path "*/metadata/*.xml"

注意:我使用的是/你所说的“在文件系统中”,我将其解释为“任何地方”。

或者,使用locate(只会查找所有用户都可以访问的文件):

$ locate "/metadata/" | grep '\.xml$'

(这有点像find上面第一个)

答案2

您需要意识到的是,“find”中的 -name 实际上是“basename”因此,为了获取实际的文件名,我们可以运行嵌套查找,其中我们首先找到名称为“metadata”的目录,然后查找任何该目录下的*.xml文件:

find . -type d -name metadata -exec sh -c '
shift $1;
while case $# in 0 ) break;; esac; do
   find "${1}/." ! -name . -prune -type f -name \*.xml
   shift
done
' 2 1 {} +

答案3

这有点草率,但是当您位于您选择的父目录中时,您可以尝试

grep -nr "*metadata/*xml" .

相关内容